Prosim o pomoc, betatestuju messager na strankach a snazim se aby byl co nejstabilnejsi. Tak Vas prosim, abyste mi ho spamovali, proste cokoli, vkladali nebezpecny znaky, vcetne odesilanim vzkazu pod jmenem admina - GALLILEO; proste ho zkuste znicit, je to neostra verze. Dik vsem hackerum! :-*
Jeste neco: adresa je http://www.zadnystranky.wz.cz jen tak kdyby neco :)
Např.:
1) Testovat nick i ve velikosti písmen (i když se u něho neobjeví "ADMIN")
2) Zalamovat delší řetězce
3) Nedávat lomítka před uvozovky nebo apostrofy
4) odřádkování jako <br> ?
5) více odřádkování filtrovat na jedno
...
A pokud nevyhovují požadavky, vrátit zpátky na form s vyplněnými údaji.
Víš jak? Hodim ti tam "sprostý slova" a třeba ti ho zrušej :-)
co takhle zatizit server... pak se ti stranky budou nahravat skurvene dlouho...
mam na to program :)
jo, zkus to zatizit :)
btw. pro 213.220.204.4 (r3m4.mistral.cz) pri cteni tvy reakce jsem se fakt bavil :) protoze to, co jsi napsal je muj seznam TO DO
Tak zalomeni slova a odradkovani doprogramovano, ted ten NICK a lomitka... uf
To víš, všechno tohle jsem taky musel řešit :-)
1)v PHP ořezat ten text na 1000 znaků {$_POST["text"]=substr($_POST["text"],0,1000);}
2) nepřijímat přidání řetězce přes metodu GET, to znamená, brát proměnné (nick,pwd,text) ze superglobální proměnné nick,pwd,text=$_POST["nick,pwd,text"];
3)mohl bys také rozpoznávat odkazy přes regulární fráze
Tenhle script jsem našel na JakNaWeb:
$zprava = SubStr($zprava, 0, 1500); //bereme pouze 1500 znaku
$zprava = Trim($zprava); //odstraneni mezer z konce retezce
$zprava = HTMLSpecialChars($zprava); //odstraneni nebezpecnych znaku
$zprava = Str_Replace("\n"," <BR> ", $zprava); //nahrazeni koncu radku na tagy <BR>
$znak = 66; //dlouha slova delit po .. znacich
$slovo = Split("[[:blank:]]+", $zprava); //rozdeleni textu na slova
for($y=0;$y<Count($slovo);$y++):
$slovo[$y] = Trim($slovo[$y]); //odstraneni mezer na konci slova
if (Strlen($slovo[$y])<=$znak): //nebudeme delit
if (EregI("^(www\..+\..{2,3})$", $slovo[$y])): //jedna se odkaz typu www......
$odkaz = EregI_Replace("^(www\..+\..{2,3})$", "<a href=http://\\1>\\1</a> ", $slovo[$y]);
elseif (EregI("^(http://.+\..{2,3})$", $slovo[$y]))://jedna se odkaz typu http://.......
$odkaz = EregI_Replace("^(http://.+\..{2,3})$", "<a href=\\1>\\1</a> ", $slovo[$y]);
else:
$odkaz = $slovo[$y] . " "; //jedna se o normalni slovo
endif;
$celek .= $odkaz; //spojime vsechny slova opet dohromady
else:
$delit = Ceil(StrLen($slovo[$y])/$znak); //delime dlouhe slovo
for($z=0;$z<$delit;$z++):
$cast = Substr($slovo[$y], $z*$znak, $znak);
$celek .= $cast . " - "; //na konec jednotlivych casti pridame pomlcku
endfor;
endif;
endfor;
2) Na to jsem zapomněl - i když u sebe to ošetřený mám... :-)
1) a 3)
Usekávat text bez upozornění je IMHO nesmysl. Pokud text přesahuje délku, dám to vědět (JS, případně až PHP) a umožním ho uživateli přeskupit (zkrátit).
A nejdelší české slovo je někde uváděné nejzdevětadevadesáteronásobitelnějšími - 38 písmen, takže bych to vzal opět upozorněním, že nějaký "řetězec" (v tomto případě to už nebude asi slovo) překračuje nějakou délku - třeba 60 znaků a nechal to uživatele upravit.
Jo, btw
1)uvozovky a apostrofy uz opraveny :)
2)orezavani textu na 1000 tam je uz davno, a upozorneni taky snad vidite (beru prvnich 1000 znaku)
3) jestli nekdo napise neco co bude mit vic nez 45 znaku, tak je to budto inet adresa nebo nesmysl - a u ty adresy zkusim udelat vyjimku. Kazdopadne precist to pujde, ne?
Napsal jsem jenom svůj názor.
2) Nikdo nebude počítat, kolik zadává znaků. Šlo by to sice ošetřit JS, ale to nestačí, a mělo by to být i na úrovni PHP. Ovšem nikoliv to uříznout.
IMHO je prostě nejlepší nechat uživatele zadat cokoliv, a pokud to překračuje nějaký limit, upozornit ho a napsaný příspěvek mu vrátit.
Vůbec nejhorší vlastnost některých formulářů je IMHO ta, že sice uživatele upozorní, že tam má chybu, ale vrátí mu formulář nazpět prázdný. Druhá nejhorší vlastnost je asi ta, že mu příspěvek uřízne a klidně ho uloží.
to nebude diskuze ale messager!, vzkazy tam vetsinou nebejvaj delsi nez 100 - 200 znaku. :) Vyjimka muze byt 500, ale tisic uz nikoli - delam to hlavne kvuli rejpalum a hlavne, nemusim se bat, ze mi s tim nekdo neco udela.
Hele, nejak to neklape:
$znak = 66; //dlouha slova delit po .. znacich
$slovo = Split("[[:blank:]]+", $zprava); //rozdeleni textu na slova
for($y=0;$y<Count($slovo);$y++):
$slovo[$y] = Trim($slovo[$y]); //odstraneni mezer na konci slova
if (Strlen($slovo[$y])<=$znak): //nebudeme delit
if (EregI("^(www\..+\..{2,3})$", $slovo[$y])): //jedna se odkaz typu www......
$odkaz = EregI_Replace("^(www\..+\..{2,3})$", "<a href=http://\\1>\\1</a> ", $slovo[$y]);
elseif (EregI("^(http://.+\..{2,3})$", $slovo[$y]))://jedna se odkaz typu http://.......
$odkaz = EregI_Replace("^(http://.+\..{2,3})$", "<a href=\\1>\\1</a> ", $slovo[$y]);
else:
$odkaz = $slovo[$y] . " "; //jedna se o normalni slovo
endif;
$celek .= $odkaz; //spojime vsechny slova opet dohromady
else:
$delit = Ceil(StrLen($slovo[$y])/$znak); //delime dlouhe slovo
for($z=0;$z<$delit;$z++):
$cast = Substr($slovo[$y], $z*$znak, $znak);
$celek .= $cast . " - "; //na konec jednotlivych casti pridame pomlcku
endfor;
endif;
endfor;
Misto $zprava na druhem radku mam dat nazev MY promenny vzkazu - a to je vsechno? Nereaguje to ;)
A co je to za promennou $odkaz? Nejaktomu nerozumim...
ad [gallieo]:1)misto {$slovo = Split("[[:blank:]]+", $zprava);} das{$slovo = Split("[[:blank:]]+", ! $text !);}
2)a potom to z toho cyklu vyleze v proměnné $celek, neni to muj script, je z nějaké knihy návštěv, ale testoval jsem ho, a funguje
>A co je to za promennou $odkaz? Nejaktomu nerozumim...
Tak si to odsaď, a potom to pochopiš: do $odkaz vleze buď neupravené slovo, nebo už hypertextovej odkaz.
Jo, ale na ten $odkaz se pak uz mam vybodnout?
ad [gallileo]: přesně tak ;) celej ten převoranej text se složí dohromady do proměné $celek
@!#$!
sice mi to funguje, ale jen do doby co se v textu objevi odkaz, potom se do promenny celek vloze JEN ten odkaz. Chjo, myslim ze se mi ty stranky do nekoho zakoukaly a ted me neposlouchaj...
tak to ti nevim, mě ten script fungoval, text na zpracování mu dáš do proměnné $zprava a vyleze ten text z toho v proměnné $celek, jestli to nefunguje tak sorry, muj script to není. :(