Skocz do zawartości
Mac13k

Jak zabezpieczyć skrypt przed robotami

Rekomendowane odpowiedzi

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&nbsp</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

post-183115-016709800 1280822125_thumb.jpg

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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 przez m4r

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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?



			
		

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

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&nbsp</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 przez Mac13k

Udostępnij tę odpowiedź


Odnośnik do odpowiedzi
Udostępnij na innych stronach

Dołącz do dyskusji

Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie


×
×
  • Dodaj nową pozycję...