我遇到了僵尸网络的一个大问题......我认为这是一个僵尸网络...... 怎么了? 机器人填写表单并保护数据库。
以下是表格:
<form method="POST" action="">
<textarea name="text2" style="width: 290px; margin-bottom: 10px;"></textarea>
<center>
<img id="captcha" alt="Captcha" src="http://www.mysite.de/php/captcha/Captcha_show.php?sid='2d7dd1256d06a724c34b9d703f3733e9">
<br>
<a onclick="document.getElementById('captcha').src = 'php/captcha/Captcha_show.php?' + Math.random(); return false" href="#">
<br>
<input id="mod" class="inputbox" type="text" alt="Bitte die Zeichen des Bildes eingeben." style="width: 280px" maxlength="15" name="captcha_code" value="">
<sub>Bitte die Zeichen des Bildes abschreiben</sub>
<br>
<br>
<input class="button" type="submit" value="Hinzufügen" name="submit">
</center>
</form>
这是一个包含无法插入单词的数组:
$badWords = array("/delete/i","/deleted/i","/deletee/i", "/update/i", "/updateu/i", "/updateup/i","/union/i","/unionu/i","/unionun/i", "/insert/i","/inserti/i","/insertin/i","/drop/i","/dropd/i","/dropdr/i","/http/i","/httph/i","/httpht/i","/--/i", "/url/i", "/urlu/i", "/urlur/i", "/true/i", "/truet/i", "/truetr/i", "/false/i", "/falsef/i", "/falsefa/i","/!=/i","/==/i", "/insurance/i", "/eating/i", "/viagra/i");
$text3 = preg_replace($badWords, "a12", $text2);
if($text3 != $text2){
echo "<center><b>No valid data!</b></center> <meta http-equiv=\"refresh\" content=\"2; URL=http://www.mysite.de\">";
exit;
}
通常,用户不应该发布任何文字,例如“伟哥”中。
我无法理解某人或机器人如何插入包含这些坏词的文字?
我正在使用PDO和函数如htmlspecialchars()stripslashes()strip_tags()htmlspecialchars()来防止破解......
有什么想法吗?
答案 0 :(得分:0)
您的脚本可能被HTML实体攻击:
示例:强>
输入为“Hello”,但在代码中为Hello
。
如果您现在运行preg_match
,则无法找到任何内容
var_dump(preg_match('/Hello/i','Hello'));
// returns int 0
如果要阻止SQL注入:使用预准备语句 如果您不想被垃圾邮件发送,您还需要寻找其他方式,只要我可以多次插入有效字符串。
注意:我认为您可以使用html_entity_decode
var_dump(preg_match('/Hello/i',html_entity_decode('Hello')));
// returns int 1