Znak skoromezery rozbije curl

Znak skoromezery rozbije curl
« kdy: 22. 12. 2024, 23:57:56 »
Proč takováhle uplně triviální věc "pošle linux do kolen"? trochu  nadneseně . (přes ssh)
1. zkopíruju url adresu odněkud z prohlížeče
Provedu příkaz v terminálu  curl ​http://adre.sk/ - vypadá to přece jasně. Vidíte tam okem někde něco zvláštního?
Ale vrátí se mi odpověď z lokálního webserveru. (což není důležité,ani to, že jednoslovné názvy resolvuji na 0.0.0.0, důležité je ,že se nenačte originální URL)
Co se stalo?
00000000  63 75 72 6c 20 e2 80 8b  68 74 74 70 3a 2f 2f 6d  |curl ...http://m|
podle logu dns došlo k resolvování
query[AAAA] http from 127.0.0.1
config http is ::
config http is 0.0.0.0
config http is NODATA


Co říká curl -v(erbose:)
> GET //adre.sk HTTP/1.1
> Host: http


Začíná přivířívat.

-Proč mě na to nic neupozorní?
-Co rozdělí text tak, že dojde k resolvování jména "http"
-proč to nijak nezvýrazní shell, terminál, browser?
-Proč nedojde k žádné chybě?

(řečnická)Otázka za bludišťáka: Co se stane když to celé bude v uvozovkách .

Wget se chovátakto:   http://adre.sk : Chybí schéma. aspoň. chyba.
« Poslední změna: Dnes v 00:06:41 od Ħαℓ₸℮ℵ ␏⫢ ⦚ »


Re:znak skoromezery hackne curl
« Odpověď #1 kdy: Dnes v 00:14:02 »
jak dlouho jste ten bílej znak vymejšlel?

Re:znak skoromezery hackne curl
« Odpověď #2 kdy: Dnes v 06:55:52 »
Ehh unicode.
njn, e2 80 8b = ZERO WIDTH SPACE

Kde se tam vzal v té Vaší kopírovací operaci... nevím.
Mimochodem ta krátká mezera je za "curl ", tj. navazuje na standardní mezerník ASCII 0x20, a je zřejmě vyhodnocena jako součást stringu http:// .
Můj odhad: shell v tom SSH není úplně připraven zpracovat Unicode? Nepovažuje ten znak za whitespace, a CURL ho dostane jako součást argv[1] a už si ho taky neořízne atd.

Mimochodem palec nahoru za úspěšný lov.

alex6bbc

  • *****
  • 1 691
    • Zobrazit profil
    • E-mail
Re:Znak skoromezery rozbije curl
« Odpověď #3 kdy: Dnes v 10:53:56 »
mam ten dojem, ze vsecko okolo http je ascii, takze cokoliv jineho se musi posilat jinak, treba jako base64.

RDa

  • *****
  • 2 785
    • Zobrazit profil
    • E-mail
Re:Znak skoromezery rozbije curl
« Odpověď #4 kdy: Dnes v 15:30:30 »
(což není důležité,ani to, že jednoslovné názvy resolvuji na 0.0.0.0, důležité je ,že se nenačte originální URL)
Co se stalo?
00000000  63 75 72 6c 20 e2 80 8b  68 74 74 70 3a 2f 2f 6d  |curl ...http://m|

Ale ten retezec "e2 80 8b" + http: je jednoslovny nazev, takze si protirecite.
Zkuste to priste s šhttp:// a melo by se to chovat stejne.

CURL v tom jednoduse vidi "mujšervřík/cesta/soubor"

WGET je imho jen pro http (a volitelne ftp) z webu, takze validuje URL spravne,
zatimco CURL je multiprotokolovy ( https://curl.se/docs/manpage.html jich hned na pocatku ukazuje mnohooo )


Re:Znak skoromezery rozbije curl
« Odpověď #5 kdy: Dnes v 16:11:42 »
curl verze 7.88.1
Kód: [Vybrat]
$ curl ​http://adre.sk/
curl: (3) URL using bad/illegal format or missing URL

ByCzech

  • *****
  • 1 863
    • Zobrazit profil
    • E-mail
Re:Znak skoromezery rozbije curl
« Odpověď #6 kdy: Dnes v 17:03:28 »
curl verze 7.88.1
Kód: [Vybrat]
$ curl ​http://adre.sk/
curl: (3) URL using bad/illegal format or missing URL

curl 8.11.1
Kód: [Vybrat]
$ curl ​http://adre.sk/
curl: (3) URL rejected: Port number was not a decimal number between 0 and 65535

M_D

  • ****
  • 347
    • Zobrazit profil
    • E-mail
Re:Znak skoromezery rozbije curl
« Odpověď #7 kdy: Dnes v 17:51:18 »
Ta reakce curl 7.8.11 je správná, URL může obsahovat jen US-ASCII a ostatní se má eskejpovat. 8.11.1 asi vyhodnotil, že to nezačíná platnou definicí schema, pro které je dovoleno jen a~z,0~9,-,+,. a musí začínat písmenem, takže asi vzal, že přímo začíná authority část a dle dvojtečky bral oddělovač na číslo portu a tam našel to /, takže řval?
S tímhle také bojuji, hlavně když člověk má to psát jako dokument do wordu, pak se z toho dělá hezky vypadající PDF a nakonec z toho kopírovat nějaké příkazy do cli - to je pak boj s divnými mezerami, uvozovkami, ...
« Poslední změna: Dnes v 17:52:59 od M_D »