Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zebezpieczenie antyspamowe
Forum PHP.pl > Forum > PHP
Initial
Jak to zrobic zeby skrypt liczyl linki zawarte w formularzu i jezeli jest ich np. wiecej niz 3 nie dodawal komentarza do bazy questionmark.gif Chcialbym podczepic ten skrypt do tego:

  1. <?
  2.  
  3. if (!eregi("index.php", $PHP_SELF)) {
  4.  
  5.  die ("Nie masz dostępu do tego pliku bezpośrednio...");
  6.  
  7. }
  8.  
  9. ?>
  10.  
  11. <hr width="90%" size="1" noshade>
  12.  
  13. <?
  14.  
  15.  
  16.  
  17. $nid = $HTTP_GET_VARS['id'];
  18.  
  19. $action = $HTTP_GET_VARS['action'];
  20.  
  21.  
  22.  
  23. //Łączenie i wybranie bazy 
  24.  
  25.  $link = @mysql_connect($db_host,$db_user,$db_pass);
  26.  
  27.  @mysql_select_db ($db_name);
  28.  
  29.  
  30.  
  31. if($action == "add"){
  32.  
  33.  $autor_komentarz = $HTTP_POST_VARS['autor_komentarz'];
  34.  
  35.  $lr_komentarz = $HTTP_POST_VARS['lr_komentarz'];
  36.  
  37.  if($autor_komentarz == "")
  38.  
  39. $autor_komentarz = "Anonim";
  40.  
  41.  if($lr_komentarz != ""){
  42.  
  43. $lr_komentarz = ereg_replace("n","<br>",$lr_komentarz);
  44.  
  45. $autor_komentarz = $autor_komentarz;
  46.  
  47. $query = "INSERT INTO ".$tab_komentarz." VALUES ('".$nid."', '".$autor_komentarz."', '".$lr_komentarz."')";
  48.  
  49. $result = mysql_query ($query);
  50.  
  51.  }
  52.  
  53. }
  54.  
  55. ?>
  56.  
  57. <div align="center"><strong><h3>Komentarze</h3></strong></div>
  58.  
  59. <?
  60.  
  61. $query = "SELECT * FROM ".$tab_komentarz." WHERE nowa_komentarz_id='".$nid."'";
  62.  
  63.  $result = @mysql_query ($query);
  64.  
  65.  while ($line = @mysql_fetch_array($result, MYSQL_ASSOC)){
  66.  
  67. ?>
  68.  
  69. <table bgcolor="#fbfbfb" align="center" width="400" cellspacing="2" cellpadding="2" border="0">
  70.  
  71. <tr>
  72.  
  73.  <td valign="top">Autor: <strong><span style="color:#aa0000;"><?print $line['nowa_komentarz_autor']?></span></strong></td>
  74.  
  75. </tr>
  76.  
  77. <tr>
  78.  
  79.  <td valign="top"><div align="justify" style="color:#0000aa;"><?print $line['nowa_komentarz_body']?></div></td>
  80.  
  81. </tr>
  82.  
  83. <tr>
  84.  
  85.  <td valign="top" align="center"><img src="images/dot.gif" width="400" height="1" border="0" alt=""></td>
  86.  
  87. </tr>
  88.  
  89. </table>
  90.  
  91. <?
  92.  
  93. }
  94.  
  95. ?>
  96.  
  97. <table align="center" width="250" cellspacing="2" cellpadding="2" border="0">
  98.  
  99. <form action="index.php?index.php?did=art&id=<?print $nid?>&kid=<?print $kid?>&&action=add" method="post">
  100.  
  101. <tr>
  102.  
  103.  <td colspan="2" align="center"><strong>Dodaj komentarz</strong></td>
  104.  
  105. </tr>
  106.  
  107. <tr>
  108.  
  109.  <td colspan="2" align="center"><img src="images/dot.gif" width="150" height="1" border="0" alt=""></td>
  110.  
  111. </tr>
  112.  
  113. <tr>
  114.  
  115.  <td width="100%"><strong>Autor</strong></td>
  116.  
  117.  <td><input class="inputtext" type="text" name="autor_komentarz" style="border: 1px solid #000000; width: 250px;"></td>
  118.  
  119. </tr>
  120.  
  121. <tr>
  122.  
  123.  <td><strong>Komentarz</strong></td>
  124.  
  125.  <td><textarea cols="20" rows="5" class="inputarea" name="lr_komentarz" style="border: 1px solid #000000; width: 250px; height: 100px;"></textarea></td>
  126.  
  127. </tr>
  128.  
  129. <tr>
  130.  
  131.  <td colspan="2" align="right"><input type="submit" class="button" name="submit" value="Dodaj" style="border: 1px solid #000000;"></td>
  132.  
  133. </tr></form>
  134.  
  135. </table>
hiomp
mnie tez to ciekawi w jaki sposob mozna to zrobic questionmark.gif
Zeman
Cytat(Initial @ 5.04.2007, 19:26:51 ) *
Jak to zrobic zeby skrypt liczyl linki zawarte w formularzu i jezeli jest ich np. wiecej niz 3 nie dodawal komentarza do bazy questionmark.gif Chcialbym podczepic ten skrypt do tego:

  1. <?
  2. ...
  3. $nid = $HTTP_GET_VARS['id'];
  4. ...
  5. $query = "INSERT INTO ".$tab_komentarz." VALUES ('".$nid."', '".$autor_komentarz."', '".$lr_komentarz."')";
  6.  
  7. $result = mysql_query ($query);
  8. ...
  9. ?>


Średni pomysł żeby to co przychodzi z $_GET wstawiać odrazu bez sprawdzania w zapytanie do bazy (bezpieczeństwo).

zliczyć linki.... osobiście użyłbym wyrażem regularnych, tj preg_match_all(...)
a jeśli formularz będzie wysyłany masę razy to być może pokusiłbym się o coś szybszego, np strpos(...)
Initial
Ale ja nie jestem zbyt biegly w php. Moglbys mi pokazac jak mam to zastosowac questionmark.gif
franki01
Chcialbym tylko powiedziec ze wlasnie przy takich problemach samemu mozna najlepiej uczyc sie PHP. Metoda prob i bledow + manual na php.net ;]
Initial
wiem ja caly czas proboje tylko mi nie wychodzi dlatego napisalem na forum
franki01
To bm zrobil tak:

  1. <?php
  2.  
  3. // ......
  4.  
  5. preg_match_all("( ((http://)|(http://)|(ftp://))?([0-9a-zA-Z-/.]{5,}) )si", $_POST['lr_komentarz'], $data);
  6.  
  7. $ilosc = count($data[1]);
  8. ?>


Jak sie nie pomylilem to w $ilosc powinna byc ilosc linkow w komentarzu.
Initial
i w ktorym miejscu to dac questionmark.gif
franki01
Zamiast (skasuj to):

  1. <?php
  2. if($lr_komentarz != ""){
  3. ?>


wstaw:

  1. <?php
  2.  
  3. preg_match_all("( ((http://)|(http://)|(ftp://))?([0-9a-zA-Z-/.]{5,}) )si", $_POST['lr_komentarz'], $data);
  4.  
  5. $ilosc = count($data[1]);
  6.  
  7.  if($lr_komentarz != "" && $ilosc <= 3){
  8.  
  9. ?>



Chociaz nie zapewniam ze na 100% to bedzie dzialalo.
Initial
Zrobilem tak i niedziala sad.gif

  1. <?
  2.  
  3. if (!eregi("index.php", $PHP_SELF)) {
  4.  
  5. die ("Nie masz dostępu do tego pliku bezpośrednio...");
  6.  
  7. }
  8.  
  9. ?>
  10.  
  11. <hr width="90%" size="1" noshade>
  12.  
  13. <?
  14.  
  15.  
  16.  
  17. $nid = $HTTP_GET_VARS['id'];
  18.  
  19. $action = $HTTP_GET_VARS['action'];
  20.  
  21.  
  22.  
  23. //Łączenie i wybranie bazy 
  24.  
  25. $link = @mysql_connect($db_host,$db_user,$db_pass);
  26.  
  27. @mysql_select_db ($db_name);
  28.  
  29.  
  30.  
  31. if($action == "add"){
  32.  
  33. $autor_komentarz = addslashes(htmlspecialchars($HTTP_POST_VARS['autor_komentarz']));
  34.  
  35. $lr_komentarz = addslashes(htmlspecialchars($HTTP_POST_VARS['lr_komentarz']));
  36.  
  37. if($autor_komentarz == "")
  38.  
  39. $autor_komentarz = "Anonim";
  40.  
  41. preg_match_all("( ((http://)|(http://)|(ftp://))?([0-9a-zA-Z-/.]{5,}) )si", $HTTP_POST_VARS['lr_komentarz'], $data);
  42.  
  43. $ilosc = count($data[1]);
  44.  
  45.  if($lr_komentarz != "" && $ilosc <=3){
  46.  
  47.  
  48. $lr_komentarz = ereg_replace("n","<br>",$lr_komentarz);
  49.  
  50. $autor_komentarz = $autor_komentarz;
  51.  
  52. $query = "INSERT INTO ".$tab_komentarz." VALUES ('".$nid."', '".$autor_komentarz."', '".$lr_komentarz."')";
  53.  
  54. $result = mysql_query ($query);
  55.  
  56. }
  57.  
  58. }
  59.  
  60. ?>
  61. <meta http-equiv=Content-Type content="text/html; charset=iso-8859-2">
  62. <div align="center"><strong><h3>Komentarze</h3></strong></div>
  63. <div align="center"><h5>Bardzo uprzejmie prosimy o zostawianie komentarza kulturalnego i nieobrażajac
    ego nikogo. W przeciwnym wypadku zostanie on usunięty</h5></div>
  64. <?
  65.  
  66. $query = "SELECT * FROM ".$tab_komentarz." WHERE nowa_komentarz_id='".$nid."'";
  67.  
  68. $result = @mysql_query ($query);
  69.  
  70. while ($line = @mysql_fetch_array($result, MYSQL_ASSOC)){
  71.  
  72. ?>
  73.  
  74. <table bgcolor="#fbfbfb" align="center" width="400" cellspacing="2" cellpadding="2" border="0">
  75.  
  76. <tr>
  77.  
  78. <td valign="top">Autor: <strong><span style="color:#aa0000;"><?print $line['nowa_komentarz_autor']?></span></strong></td>
  79.  
  80. </tr>
  81.  
  82. <tr>
  83.  
  84. <td valign="top"><div align="justify" style="color:#0000aa;"><?print $line['nowa_komentarz_body']?></div></td>
  85.  
  86. </tr>
  87.  
  88. <tr>
  89.  
  90. <td valign="top" align="center"><img src="images/dot.gif" width="400" height="1" border="0" alt=""></td>
  91.  
  92. </tr>
  93.  
  94. </table>
  95.  
  96. <?
  97.  
  98. }
  99.  
  100. ?>
  101.  
  102. <table align="center" width="250" cellspacing="2" cellpadding="2" border="0">
  103.  
  104. <form action="index.php?index.php?did=art&id=<?print $nid?>&kid=<?print $kid?>&&action=add" method="post">
  105.  
  106. <tr>
  107.  
  108. <td colspan="2" align="center"><strong>Dodaj komentarz</strong></td>
  109.  
  110. </tr>
  111.  
  112. <tr>
  113.  
  114. <td colspan="2" align="center"><img src="images/dot.gif" width="150" height="1" border="0" alt=""></td>
  115.  
  116. </tr>
  117.  
  118. <tr>
  119.  
  120. <td width="100%"><strong>Autor</strong></td>
  121.  
  122. <td><input class="inputtext" type="text" name="autor_komentarz" style="border: 1px solid #000000; width: 250px;"></td>
  123.  
  124. </tr>
  125.  
  126. <tr>
  127.  
  128. <td><strong>Komentarz</strong></td>
  129.  
  130. <td><textarea cols="20" rows="5" class="inputarea" name="lr_komentarz" style="border: 1px solid #000000; width: 250px; height: 100px;"></textarea></td>
  131.  
  132. </tr>
  133.  
  134. <tr>
  135.  
  136. <td colspan="2" align="right"><input type="submit" class="button" name="submit" value="Dodaj" style="border: 1px solid #000000;"></td>
  137.  
  138. </tr></form>
  139.  
  140. </table>
franki01
A mozesz napiac dokladniej co jest zle. Czy dodaje do bazy czy co...
Initial
no dodaje do bazy
franki01
To ponizej u mnie dziala na 100% dobrze. Drobne zmiany zrobilem i dziala.

  1. <?
  2.  
  3. if (!eregi("index.php", $PHP_SELF)) {
  4.  
  5. die ("Nie masz dostępu do tego pliku bezpośrednio...");
  6.  
  7. }
  8.  
  9. ?>
  10.  
  11. <hr width="90%" size="1" noshade>
  12.  
  13. <?
  14.  
  15.  
  16.  
  17. $nid = $HTTP_GET_VARS['id'];
  18.  
  19. $action = $HTTP_GET_VARS['action'];
  20.  
  21.  
  22.  
  23. //Łączenie i wybranie bazy
  24.  
  25. $link = @mysql_connect($db_host,$db_user,$db_pass);
  26.  
  27. @mysql_select_db ($db_name);
  28.  
  29.  
  30.  
  31. if($action == "add"){
  32.  
  33. $autor_komentarz = addslashes(htmlspecialchars($HTTP_POST_VARS['autor_komentarz']));
  34.  
  35. $lr_komentarz = addslashes(htmlspecialchars($HTTP_POST_VARS['lr_komentarz']));
  36.  
  37. if($autor_komentarz == "")
  38.  
  39. $autor_komentarz = "Anonim";
  40.  
  41. preg_match_all("(((http://www.)|(www.)|(http://)|(https://www.)|(https://)|(ftp://))([0-9a-zA-Z-/.%]{5,}))si", $HTTP_POST_VARS['lr_komentarz'], $data);
  42.  
  43. $ilosc = count($data[1]);
  44. echo $ilosc;
  45.  if($lr_komentarz != "" && $ilosc <= 3){
  46.  
  47. $lr_komentarz = ereg_replace(" ","<br>",$lr_komentarz);
  48.  
  49. $autor_komentarz = $autor_komentarz;
  50.  
  51. $query = "INSERT INTO ".$tab_komentarz." VALUES ('".$nid."', '".$autor_komentarz."', '".$lr_komentarz."')";
  52.  
  53. $result = mysql_query ($query);
  54.  
  55. }
  56.  
  57. }
  58.  
  59. ?>
  60. <meta http-equiv=Content-Type content="text/html; charset=iso-8859-2">
  61. <div align="center"><strong><h3>Komentarze</h3></strong></div>
  62. <div align="center"><h5>Bardzo uprzejmie prosimy o zostawianie komentarza kulturalnego i nieobrażajac
    ego nikogo. W przeciwnym wypadku zostanie on usunięty</h5></div>
  63. <?
  64.  
  65. $query = "SELECT * FROM ".$tab_komentarz." WHERE nowa_komentarz_id='".$nid."'";
  66.  
  67. $result = @mysql_query ($query);
  68.  
  69. while ($line = @mysql_fetch_array($result, MYSQL_ASSOC)){
  70.  
  71. ?>
  72.  
  73. <table bgcolor="#fbfbfb" align="center" width="400" cellspacing="2" cellpadding="2" border="0">
  74.  
  75. <tr>
  76.  
  77. <td valign="top">Autor: <strong><span style="color:#aa0000;"><?print $line['nowa_komentarz_autor']?></span></strong></td>
  78.  
  79. </tr>
  80.  
  81. <tr>
  82.  
  83. <td valign="top"><div align="justify" style="color:#0000aa;"><?print $line['nowa_komentarz_body']?></div></td>
  84.  
  85. </tr>
  86.  
  87. <tr>
  88.  
  89. <td valign="top" align="center"><img src="images/dot.gif" width="400" height="1" border="0" alt=""></td>
  90.  
  91. </tr>
  92.  
  93. </table>
  94.  
  95. <?
  96.  
  97. }
  98.  
  99. ?>
  100.  
  101. <table align="center" width="250" cellspacing="2" cellpadding="2" border="0">
  102.  
  103. <form action="index.php?index.php?did=art&id=<?print $nid?>&kid=<?print $kid?>&&action=add" method="post">
  104.  
  105. <tr>
  106.  
  107. <td colspan="2" align="center"><strong>Dodaj komentarz</strong></td>
  108.  
  109. </tr>
  110.  
  111. <tr>
  112.  
  113. <td colspan="2" align="center"><img src="images/dot.gif" width="150" height="1" border="0" alt=""></td>
  114.  
  115. </tr>
  116.  
  117. <tr>
  118.  
  119. <td width="100%"><strong>Autor</strong></td>
  120.  
  121. <td><input class="inputtext" type="text" name="autor_komentarz" style="border: 1px solid #000000; width: 250px;"></td>
  122.  
  123. </tr>
  124.  
  125. <tr>
  126.  
  127. <td><strong>Komentarz</strong></td>
  128.  
  129. <td><textarea cols="20" rows="5" class="inputarea" name="lr_komentarz" style="border: 1px solid #000000; width: 250px; height: 100px;"></textarea></td>
  130.  
  131. </tr>
  132.  
  133. <tr>
  134.  
  135. <td colspan="2" align="right"><input type="submit" class="button" name="submit" value="Dodaj" style="border: 1px solid #000000;"></td>
  136.  
  137. </tr></form>
  138.  
  139. </table>
Amadi
Witam wszystkich smile.gif

Mam podobny problem ze spamem w komentarzach. Na razie spróbowałem dodać obrazki z tekstem w najprostrzy możliwy sposób, ale bydlaki jakoś to obeszły. Mógłby mi ktoś pomóc / podpowiedzieć jak to trochę udoskonalić ? Zastanawiam sie nad filtrowaniem słów kluczowych typu "viagra" ale to nigdy nie będzie doskonałe...

Tu przykład zaśmieconego komentarza:
http://www.likh.fc.pl/Aradesh/DT/index.php?id=ww4

Obecny kod skryptu obsługującego komentarze (wiem że nie jest zbyt wyszukany ale napisałem go w jeden wieczór, a i orłem w php za bardzo nie jestem winksmiley.jpg ):
Cytat
<?
$katalog = "pliki/komentarze/";
$id = $_REQUEST["id"];

$pole1 = trim($_POST["pole1"]);
$pole2 = trim($_POST["pole2"]);
$pole3 = trim($_POST["pole3"]);
$kod_trans = $_POST["kod_trans"];

$literki[0]="dupa";
$literki[1]="h17kjp";
$literki[2]="f283am";
$literki[3]="ds2w8k";
$literki[4]="h9ax24";
$literki[5]="6wp42z";
$literki[6]="43cn1j";
$literki[7]="i56vwb";
$literki[8]="c3e29d";
$literki[9]="u7wk38";
$literki[10]="5xsw2h";

$kod=rand(1,10);


if ($pole1<>"" and $pole2<>"" and strcmp($literki[$kod_trans],$pole3)==0 )
{
$pole1 = stripslashes($pole1);
$pole2 = stripslashes($pole2);
$pole2=eregi_replace("\r","",$pole2);
$pole2=eregi_replace("\n","<br />",$pole2);
$data = sprintf("%04d-%02d-%02d %02d:%02d:%02d",
date("Y"), date("m"), date("d"), date("H"), date("i"), date("s"));
$f=fopen("$katalog$id.txt","a");
fputs($f,"$data`$pole1`$pole2\n");
fclose($f);
}

if (file_exists("$katalog$id.txt"))
{
$dane = file("$katalog$id.txt");
$dane = array_reverse($dane);
foreach ($dane as $linia)
{
$l = explode("`", $linia);
echo "<p>Dnia <b>$l[0]</b> użytkownik <b>$l[1]</b>
napisał:<br />$l[2]</p>";
}
}
else echo "Twój komentarz może być pierwszy...";
?>

<form action="index.php" method="post">
<input type="hidden" name="id" value="<? echo $id; ?>" />
<input type="hidden" name="kod_trans"
value="<? echo $kod; ?>" />
<br><br>
<table>

<tr><td>Nick:</td>
<td><input type="text" name="pole1" /></td></tr>

<tr><td valign="middle"><br>Kod z obrazka:<br></td>
<td valign="middle"><br><input type="text" name="pole3" /> <? echo "<img src=\"pliki/$kod.jpg\">";?><br><br></td></tr>

<tr><td>Komentarz:</td>
<td><textarea name="pole2" rows="15" cols="60"></textarea></td></tr>

<tr><td> </td><td><input type="submit" value=" Dopisz! " /></td></tr>
</table>
</form>
Kicok
Cytat
<input type="hidden" name="kod_trans"
value="<? echo $kod; ?>" />


Choćby nie wiem jak skomplikowany był ten obrazek to dla botów odczytanie tekstu będzie banalne. Tak samo podawanie jawnie numeru obrazka jest dla botów ogromnym ułatwieniem. Jeśli nie chcesz bawić w dynamiczne generowanie obrazków to:

1. Poczytaj o sesjach. Podczas wyświetlania formularza zapisuj do $_SESSION losowy numer kodu z tablicy $literki.
2. Stwórz sobie dodatkowy plik php, np. captcha.php, który odczyta z tablicy $_SESSION numer kodu i na tej podstawie wyśle do przeglądarki odpowiedni obrazek:
  1. <?php
  2.  
  3.  
  4. $literki[0] = "dupa";
  5. $literki[1] = "h17kjp";
  6. $literki[2] = "f283am";
  7. $literki[3] = "ds2w8k";
  8. $literki[4] = "h9ax24";
  9. $literki[5] = "6wp42z";
  10. $literki[6] = "43cn1j";
  11. $literki[7] = "i56vwb";
  12. $literki[8] = "c3e29d";
  13. $literki[9] = "u7wk38";
  14. $literki[10] = "5xsw2h";
  15.  
  16.  
  17.  
  18. if( !isset( $literki[$_SESSION['losowy_kod']] ) || !file_exists( 'pliki/' . $_SESSION['losowy_kod'] ) ) {
  19. header( 'HTTP/1.1 404 Not Found' );
  20. exit();
  21. }
  22.  
  23. header( 'Cache-Control: no-cache, must-revalidate' ); 
  24. header( 'Expires: Mon, 26 Jul 1997 05:00:00 GMT' );
  25. header( 'Content-type: image/jpeg' );
  26.  
  27. readfile( 'pliki/' . $_SESSION['losowy_kod'] . '.jpeg' );
  28.  
  29. ?>

Dzięki temu do formularza będziesz mógł wstawić obrazek z nic nie znaczącym źródłem:
  1. <img src="captcha.php" />

3. Po wysłaniu formularza sprawdzasz czy kody się zgadzają. Jeśli tak to dodajesz komentarz.
Amadi
Niegłupie, ale widzę że będę się musiał w wolnej chwili trochę douczyć żeby to wdrożyć w pełni świadomie smile.gif

A póki co dorzuciłem zabezpieczenie proste do bólu wycinające komentarze zawierające słowa kluczowe typu "viagra", "cialis" itd. I o dziwo działa tongue.gif A przy tym użytkownicy się nie buntują bo są to słowa raczej przez nich nie używane smile.gif Mam z tą stroną o tyle dobrą sytuację że jest stricte polska, a boty raczej są anglojęzyczne, więc łatwiej powybierać słowa kluczowe blokujące możliwość komentowania.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.