形式哈克/ XSS/SQL注入

问题描述:

我遇到了一个僵尸网络的大问题......我认为它是一个僵尸网络...... 会发生什么? 机器人填写表单并垃圾数据库。形式哈克/ XSS/SQL注入

这里是以下形式:

<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; 
} 

因此通常使用者不应该能够发布与例如任何文本“viagra”在里面。

我不明白某人或机器人如何插入带有这些不良词语的文本?

我使用的PDO和功能,如用htmlspecialchars()stripslashes()函数用strip_tags()用htmlspecialchars(),以防止黑客...

任何想法?

+0

防止黑客我,我有一个怀疑,你一般的设计可能会变成缺乏质量的小细节... –

+0

嗯...但$ badwordsarray应该工作没有问题,但机器人能够插入愚蠢的消息,像“viagra”的话在它。这可能是因为有些细节不能正常工作,但正因为如此,我在问我的问题。那么你有什么想法吗?我还能做些什么来防止僵尸网络攻击?攻击者必须拥有管理表单的文件的URL(action =“”)。他无法看到文件的位置,他怎么能发布任何内容? –

+1

防止像“删除”这样的词被插入到数据库中,看起来像是真的害怕用户输入。你不应该害怕它,而只是简单地逃避它。 – CodeCaster

脚本可以通过HTML实体被黑客攻击:

例子:
输入为 “H e l l o”,但它的代码是&#72;&#101;&#108;&#108;&#111;。 如果你现在运行preg_match如果你想防止SQL注入你不会找到任何

var_dump(preg_match('/Hello/i','&#72;&#101;&#108;&#108;&#111;'));  
// returns int 0 

:使用预处理语句。
如果你不想被垃圾邮件,你还需要寻找其他的方式,只要我可以简单地插入一个有效的字符串多次。

通知:我觉得你可以,如果你使用“PDO功能,如用htmlspecialchars()”使用html_entity_decode

var_dump(preg_match('/Hello/i',html_entity_decode('&#72;&#101;&#108;&#108;&#111;'))); 
// returns int 1