Portál AbcLinuxu, 5. května 2025 10:32
Ahoj,
napsal jsem jednoduchý skriptík, pomocí kterého si uživatelé mohou měnit heslo.
Zdrojáky jsou tady: http://hg.vps.frantovo.cz/veverka.ch/
A běží to tady: https://posta.veverka.ch/heslo/
K PHP jsem byl nucen se vrátit, protože na tom serveru teď nic jiného neběží, a nejsem si v něm moc jistý (jsem zmlsaný Javou ), takže bych vás chtěl požádat o revizi kódu. Kdo to hackne první, má u mě pivo
(ale o D/DoS útok nestojím). Na tom serveru neběží nic kritického (ani tam nemám žádné zajímavé e-maily), takže to považuji za celkem dobrou chvíli, abych se zeptal: co byste na tom kódu vylepšili?
Franta
BTW: je to open source, tak to můžete sami použít nebo se inspirovat, pokud vám to k něčemu bude. Použil jsem PHP + PostgreSQL (funkce zmen_heslo)
Ten regulární výraz jsem sám nepsal, kdysi jsem ho někde našel a používám. Přišel mi nejlepší z těch, na které jsem narazil. Kde najdu lepší? A v čem ta změna bude spočívat? (které adresy projdou a neprojdou).
CSFR by řešila CAPTCHA, o té uvažuji, ale zatím je tam jen to osmivteřinové zdržení před kontrolou -- proti (nedistribuovanému) útoku hrubou silou.
*) já to říkal vždycky, že s IDN budou leda problémy
A v čem ta změna bude spočívat?E-mailová adresa není jen user@jmeno.cz jak ji bežně známe. Zkuste se třeba kouknout na adresu: http://ex-parrot.com/~pdw/Mail-RFC822-Address.html Já bych osobně validaci emailu svěřil např. tomu modulu, ale ten je pro Perl, takže nějaký ekvivalent pro PHP si budete muset najít sám.
CSFR by řešila CAPTCHANe, CSRF je něco jiného. Na to pomáhá pouze do formuláře dát náhodný token a ve zpracování jej porovnat s lokálně (v db) uloženou hodnotou. IMHO to v tomto konkrétním případě řeší nutnost zadat (staré) heslo. U jiných formulářů by mohl být problém.
Ne, CSRF je něco jiného. Na to pomáhá pouze do formuláře dát náhodný token a ve zpracování jej porovnat s lokálně (v db) uloženou hodnotou.
No a právě to ta CAPTCHA řeší (přestože je primárně určena k něčemu jinému). Protože si nejdřív musím zobrazit stránku s formulářem a získat z ní kód (což je v tomto případě ještě ztížené tím, že ho musím opsat z obrázku) a pak teprve mohu formulář odeslat. Viz např. Přehled útoků na webové aplikace
function isValidEmail(email) // {{{ { var pattern = new RegExp( '^[-!#$%&\'*+/=?^_`{|}~\\w]+' /* local-part dot-atom-text (1*atext) */ + '(?:\\.[-!#$%&\'*+/=?^_`{|}~\\w]+)*' /* local-part dot-atom-text (*("." 1*atext)) */ + '@' /* literal "@" */ + '(?:' + '(?:' /* domain (dom-atom or domain-literal) */ + '[-!#$%&\'*+/=?^_`{|}~\\w]+' /* domain dot-atom (1*atext) */ + '\\.[-!#$%&\'*+/=?^_`{|}~\\w]+' /* domain dot-atom (*("." 1*atext)) */ + ')+' + '|' + '\\[' // domain domain-literal ("[") // domain domain-literal (dcontent) + '[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21-\\x5A\\x5E-\\x7F]*' // ^@ - ^H ^K ^L ^N ^_ "!" - "Z" "^" - DEL + '\\]' // domain domain-literal ("]")' + ')' + '$' ); return pattern.test(email); } // }}}
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.