2011-10-30 16 views
-1

私はボットネットで大きな問題を抱えて...私はそれがボットネットだと思う... はどうなりますか? ボットは、フォームに記入し、データベースをスパム。ここフォームハック/ 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> 

が挿入さcan'tワードを持つ配列である:

$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"

私は誰かボットはこれらの悪い言葉の一部でテキストを挿入することができる方法を理解するcan't?

私はすべてのアイデアは...ハッキングを防ぐために

をPDOとはhtmlspecialcharsのような関数()にstripslashes()strip_tags()はhtmlspecialchars()を使用していますか?

+0

を使用して、私のハックを防ぐことができると思います少しの詳細で品質が欠けているかもしれません... –

+0

うーん...しかし、$ badwordsarrayは問題を解決するはずですが、ボットはその中に "viagra"のような単語を含むばかげたメッセージを挿入することができます。それは正しく動作しません。ほとんどの詳細があったことかもしれないが、このために私は私の質問をしています。だからあなたはどんなアイデアを持っていますか?ボットネット攻撃を防ぐために他に何ができますか?攻撃者はフォームを管理するファイル(action = "")へのURLを持っていなければなりません。彼はファイルがどこにあるのか分からなかったので、どのように彼が何かを投稿することができましたか? 「削除」のような –

+1

防止の言葉は、データベースに挿入するユーザー入力の本当に恐れているように見えます。あなたはそれを恐れてはいけませんが、単にそれを適切に逃してください。 – CodeCaster

答えて

0

あなたのスクリプトは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 

を見つけることができません:使用すると、文を作成しました。あなたがスパムしたくない場合は
は、あなたがいる限り、私は単純に有効な文字列を何度も挿入する可能性があるので、他の方法を探すためにも持っています。

お知らせ:私は、私はあなたの一般的な設計がになるかもしれないという疑いを持っているあなたは「はhtmlspecialchars()のようなPDOの機能を」使用している場合は、html_entity_decode

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