Слепая SQL-инъекция с использованием acunetix
-
20-09-2019 - |
Вопрос
привет, я использую acunetix для тестирования своего веб-сайта проблема в этом скрипте http://boedesign.com/blog/2007/02/18/ajax-star-rating/
acunetix не показывает никакого сообщения, но когда я тестирую blind sql, я могу получить такие значения, как
8 and 1=0 --
8 and 31337-31337=0
в столбце rating_id mysql я хочу разрешить использование только чисел, поэтому я внес небольшое исправление, но поскольку первое число равно 8, оно передается через if, как я могу это исправить?это что-то вроде этого в includes/rating_process.php
// IF JAVASCRIPT IS ENABLED
if($_POST){
$id = escape($_POST['id']);
$rating = (int) $_POST['rating'];
if($rating <= 5 && $rating >= 1 && $id >= 1 && $id <=9999999){
if(@mysql_fetch_assoc(mysql_query("SELECT id FROM ratings WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND rating_id = '$id'")) || isset($_COOKIE['has_voted_'.$id])){
echo 'already_voted';
} else {
и почти то же самое подумайте о "// ЕСЛИ JAVASCRIPT ОТКЛЮЧЕН".
Решение
Если вы знаете, что рейтинг должен быть целым числом, вы можете привести свою переменную как целое число :
$rating = (int) $_POST['rating'] ;
Вы можете сделать то же самое на своем id
переменная.
Это гарантирует, что у вас есть только целочисленные значения.