Как предотвратить атаку URL-слепой SQL-инъекцией - PullRequest
0 голосов
/ 01 ноября 2011

У меня есть веб-сайт, и я использую acunetix для проверки веб-уязвимостей на моем веб-сайте. при сканировании с использованием acunetix он показывал предупреждение о высоком риске при внедрении URL-слепого SQL-кода (я не помещаю код из-за его большой длины)

Например: URL, показывающий vuln

   www.site.com/phpfile.php?1d=1 

Я использую функцию mysql_real_escape_string, после чего также отображается предупреждение о высоком риске. как мне это предотвратить ...

и если что-то новое, скажите, пожалуйста, как я могу скрыть (без использования .htacess; на моем сервере не работает .htacess)? Id = 1

Например: когда пользователь щелкает запрос, он должен показать это

   www.site.com/phpfile.php

вместо

   www.site.com/phpfile.php?1d=1 

Простите мой английский и заранее спасибо за помощь

Ответы [ 4 ]

3 голосов
/ 01 ноября 2011

Вы должны экранировать строки, используя mysql_real_escape_string(), но когда ожидаемый ввод является целым числом, он никогда не помогает (если пользовательский ввод не указан в запросе, это не будет иметь никакого значения) - вы должны привести еговместо целого числа, используя (int) или функцию intval().

Кроме того, я настоятельно рекомендую вам работать с подготовленными утверждениями (например, PDO ) или со слоем ORM (например, Учение ).

2 голосов
/ 29 марта 2012

если есть что-то новое, подскажите, пожалуйста, как я могу скрыть?

В этом нет абсолютно никакого смысла.
Сокрытие ничего не добавляет к безопасности.
И просмотр профиля пользователя должен быть сделан методом GET, а не POST.

Я использую функцию mysql_real_escape_string

Эта функция не имеет ничего общего с инъекциями. Это называется не «mysql_prevent_injection», а «mysql_real_escape_string». Таким образом, он используется только для форматирования строк. И должны использоваться только для строк.
Если вы хотите рассматривать ваши данные как строку, вы должны поместить их в кавычки. Итак, mysql знал бы, что это строка.
Всегда нужно использовать эти две вещи вместе - кавычки и экранирование. Они бесполезны один без другого.

Если вы не хотите рассматривать свой номер как строку, отформатируйте его как число.

$id = intval($_GET['id']);

Вы должны форматировать каждую часть строки в соответствии с ее типом, а не просто использовать некоторые функции случайным образом.

0 голосов
/ 29 марта 2012

Если вы знаете, что ваш идентификатор должен быть числом, вы можете использовать:

if(is_numeric($_GET['id'])){
    $id = mysql_real_escape_string($_GET['id']);
}
else{
    ;///////display error
}
0 голосов
/ 01 ноября 2011

Вы можете легко скрыть ?id=1, используя запрос POST вместо GET

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...