Mac13k Opublikowano 3 Sierpnia 2010 Zgłoś Opublikowano 3 Sierpnia 2010 Mam na stronie skrypt php, którym można komentować artykuły, ale od pewnego czasu mam mnóstwo takich wpisów jak w załączniku. 1. Jak się zabezpieczyć przed czymś takim, w niezbyt skomplikowany sposób?? 2. Jak zmodyfikować skrypt aby mi tworzył katalog "komentarze" z wszystkimi atrybutami, a nie tylko do odczytu? A to treść skryptu: <? $dodaj = $name.".php?id=1"; $pokaz = $name.".php?id=2"; $nazwa = "komentarze/$name.txt"; $dane = ''; if (!file_exists("$nazwa")) { $file = fopen("$nazwa", "w"); } else if (filesize($nazwa) > 0) { $file = fopen("$nazwa", "r"); $dane = fread($file, filesize("$nazwa")); fclose($file); } echo "<table class=komnag cellpadding=0 cellspacing=0 width=480> <tr><td width=50%><A HREF='$dodaj'>Skomentuj artykuł</A></td> <td width=50% align=right><A HREF='$pokaz'>Zobacz komentarze </a></td></tr>"; switch($id) { case 1: echo (" <FORM ACTION=$name.php?id=2 METHOD=POST> <TABLE width=480> <TR><TD class=spis1>Nick:</TD><TD><INPUT TYPE=TEXT NAME=author SIZE=55></TD> <TR><TD class=spis1>E-mail:</TD><TD><INPUT TYPE=TEXT NAME=email SIZE=55></TD> <TR><TD class=spis1>Tre¶ć:</TD><TD><TEXTAREA NAME=message COLS=51 ROWS=5></TEXTAREA></TD> <TR><TD></TD><TD><INPUT TYPE=SUBMIT VALUE='dodaj komentarz'></TD></TR> <TR><TD class=komred colspan=2>- Redakcja zastrzega sobie prawo usuwania opinii zawieraj±cych tre¶ci zabronione przez prawo, obraĽliwe lub w inny sposób raż±co naruszaj±ce zasady współżycia społecznego.</TD></TR></TABLE></FORM>"); break; default: if($message) { $newsfile = "komentarze/$name.txt"; $message = eregi("[\)|\(|\}|\{|[!]|[|]]{20,}",$message)?wordwrap($message, 30,"\r\n",1):wordwrap ($message, 55," ",1); $ile = strlen($message); $message = ereg_replace("\r\n", " ", $message); $date = date("d-m-Y H:i"); $message = "<table cellpadding=0 cellspacing=0 width=480> <tr><td class=komtresc valign=top width=70%><br>– $message</td> <td class=komdat valign=top width=30%><br>($date)<br><a HREF=mailto:$email>$author</td></tr></table>"; $nowedane = "$message $dane"; if ($fp = fopen("$newsfile", 'w')) { fwrite ($fp, $nowedane); } } include ("komentarze/$name.txt"); break; } ?> Proszę o pomoc gdyź nie jestem aż taki dobry w php Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
m4r Opublikowano 3 Sierpnia 2010 Zgłoś Opublikowano 3 Sierpnia 2010 (edytowane) Zabezpieczyć najprościej? Rozwalił mnie tekst z wtw, anihilujący automaty rozsyłające spam: "Aby wykluczyć, że jesteś botem, napisz mi proszę, czy lew jest kotem?". W związku z tym możesz spokojnie dopisać coś podobnego + input do wklepywania odpowiedzi, a w kodzie dorzucić warunek, który będzie przepuszczał dalej tylko, jeżeli wartość będzie taka, jak w podanym pytaniu. Dobra wersja takiego botokillera to też prosta matematyka: "dwa dodać dwa = [tutaj input do wpisywania odpowiedzi]". Ewentualnie, możesz się pokusić o budowanie formularza przez jquery, albo sam javascript (jak bot nie widzi czystego <input> w kodzie, to nie stara się wypełnić formularza). Albo nawet podłączyć reCaptcha, albo w porywach szału twórczego samodzielnie napisać skrypt do generowania obrazka captcha (IMO to strzelanie do muchy z armaty w tym przypadku). Katalog: $sciezka = 'ewentualna_sciezka/nazwa_katalogu';if(!is_dir($sciezka)) mkdir($sciezka,0777); //z pamięci pisane, jeżeli nie działa, szukaj czegoś podobnego Edytowane 3 Sierpnia 2010 przez m4r Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Mac13k Opublikowano 4 Sierpnia 2010 Zgłoś Opublikowano 4 Sierpnia 2010 Dziękuję za podpowiedź, ale byłbym wdzięczny jakbyś mi wkomponował Twoją wypowiedź w ten konkretny skrypt, bo mi to jakoś nie wychodzi Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
m4r Opublikowano 4 Sierpnia 2010 Zgłoś Opublikowano 4 Sierpnia 2010 Jak będę miał trochę więcej wolnego czasu, coś wymyślę. Co tak na szybko przychodzi mi do głowy, a do czego nie trzeba zbytnio kombinować, to: przestań używać reliktu przeszłości, jakim jest register_globals, zacznij korzystać z _GET, _POST, etc.Wnioskuję, że tego używasz po tym, że nie ma nigdzie właśnie _POST['wartość pola']. przestań używać "starych" funkcji (eregi). zmień konstrukcję html na "normalną", czyli, w zależności od doctype - nazwy tagów wszędzie małymi (albo dużymi literami), wartości atrybutów w cudzysłowach, etc. przestań używać wycofanych atrybutów (cellpadding, cellspacing, width, etc.), jest do tego css (border-spacing, padding, width...), a widzę że klasy masz powpisywane. staraj się pisać kod trochę "ładniej", szczególnie jeżeli łączysz html z php. Albo chociaż tutaj na forum umieść kod w filtrujesz jakoś dokładnie przesyłane w komentarzach dane, czy mogę wklepać np "<script type="text/javascript">document.location...</script>" i wysłać taki wpis? Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
tomkoz11 Opublikowano 4 Sierpnia 2010 Zgłoś Opublikowano 4 Sierpnia 2010 Daj sobie spokój z capcha, pytaniami itp. Te rozwiązania są uciążliwe dla użytkowników. Zdecydowanie lepszą metodą, która eliminuje wszystkie niewyspecjalizowane boty to ukryty input, którego zwykły użytkownik nie będzie widział, a bot go wypełni. AntyCaptcha- inne sposoby na boty | Zmagania Suchego Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...
Mac13k Opublikowano 11 Sierpnia 2010 Zgłoś Opublikowano 11 Sierpnia 2010 (edytowane) Zastosowałem pierwszy sposób na boty z linka, ale coś chyba źle robię bo mi się teraz w ogóle skrypt nie wyświetla. Pomóżcie <? $dodaj = $name.".php?id=1";$pokaz = $name.".php?id=2";$nazwa = "komentarze/$name.txt";$dane = '';if (!file_exists("$nazwa")) {$file = fopen("$nazwa", "w");} else if (filesize($nazwa) > 0) {$file = fopen("$nazwa", "r");$dane = fread($file, filesize("$nazwa"));fclose($file);}echo "<table class=komnag cellpadding=0 cellspacing=0 width=480> <tr><td width=50%><a href='$dodaj'>Skomentuj artykuł</A></td> <td width=50% align=right><a href='$pokaz'>Zobacz komentarze </a></td></tr>";switch($id){case 1:echo ("<form action=$name.php?id=2 method=post><table width=480><input type=text #test{display:none;}><tr><td class=spis1>Nick:</td><td><input type=text name=author size=55></td><tr><td class=spis1>E-mail:</td><td><input type=text name=email size=55></td><tr><td class=spis1>tre¶ć:</td><td><textarea name=message cols=51 rows=5></textarea></td><tr><td><input type=submit value='dodaj komentarz'></td></tr><tr><td class=komred colspan=2>- Redakcja zastrzega sobie prawo usuwania opinii zawieraj±cychtre¶ci zabronione przez prawo, obraĽliwe lub w inny sposób raż±conaruszaj±ce zasady współżycia społecznego.</td></tr></table></form>");break;default:If($_POST[‘test’]!=’’) {//wykonaj skrypt}else{//przerwij działanie}; if($message) { $newsfile = "komentarze/$name.txt";$message = eregi("[\)|\(|\}|\{|[!]|[|]]{20,}",$message)?wordwrap($message, 30,"\r\n",1):wordwrap ($message, 55," ",1);$ile = strlen($message); $message = ereg_replace("\r\n", " ", $message);//cenzorinclude "komentarze/cenzor.inc";$author = cenzor($author,3);$email = cenzor($email,3);$message = cenzor($message,3);//koniec cenzora$date = date("d-m-Y H:i");$message = "<table width=480><tr><td class=komtresc valign=top width=70%><br>– $message</td><td class=komdat valign=top width=30%><br>($date)<br><a href=mailto:$email>$author</td></tr></table>";$nowedane = "$message$dane"; if ($fp = fopen("$newsfile", 'w')) { fwrite ($fp, $nowedane); }}include ("komentarze/$name.txt");break;}?> Edytowane 11 Sierpnia 2010 przez Mac13k Cytuj Udostępnij tę odpowiedź Odnośnik do odpowiedzi Udostępnij na innych stronach Więcej opcji udostępniania...