Form Hack / XSS / SQL Injection - PullRequest
       30

Form Hack / XSS / SQL Injection

0 голосов
/ 30 октября 2011

У меня большая проблема с ботнетом ... Я думаю, что это ботнет ... Что просходит? Бот заполняет форму и спамит базу данных.

Вот форма:

<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 () для предотвращения взлома ...

Есть идеи?

1 Ответ

0 голосов
/ 30 августа 2014

Ваш скрипт может быть взломан сущностями HTML:

Пример:
Ввод "Hello", но в коде это &#72;&#101;&#108;&#108;&#111;. Если вы сейчас запустите preg_match, вы ничего не найдете

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

Если вы хотите предотвратить SQL-инъекции: используйте подготовленные операторы.
Если вы не хотите получать спам, вы также должны искать другой путь, если бы я мог просто вставить правильную строку много раз.

Обратите внимание : Я думаю, вы можете предотвратить мой взлом, используя html_entity_decode

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