Fórum Root.cz
Hlavní témata => Software => Téma založeno: Ħαℓ₸℮ℵ ␏⫢ ⦚ 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.
-
jak dlouho jste ten bílej znak vymejšlel?
-
Ehh unicode.
njn, e2 80 8b = ZERO WIDTH SPACE
(https://www.utf8-chartable.de/unicode-utf8-table.pl?start=8192&number=128)
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.
-
mam ten dojem, ze vsecko okolo http je ascii, takze cokoliv jineho se musi posilat jinak, treba jako base64.
-
(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 )
-
curl verze 7.88.1
$ curl http://adre.sk/
curl: (3) URL using bad/illegal format or missing URL
-
curl verze 7.88.1
$ curl http://adre.sk/
curl: (3) URL using bad/illegal format or missing URL
curl 8.11.1
$ curl http://adre.sk/
curl: (3) URL rejected: Port number was not a decimal number between 0 and 65535
-
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, ...