БД запрос и цитаты - PullRequest
       6

БД запрос и цитаты

0 голосов
/ 21 августа 2010

Если я использую http://site.com/index.php?page=45, все выглядит нормально (требуется загрузка страницы).

Но когда я прохожу через http://site.com/index.php?page=45' или http://site.com/index.php?page=45" (кавычки добавляются после цифр) страница печатает ошибку:

Unhandled Exception (Debug)
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'
 ORDER BY datePub DESC
 LIMIT 10' at line 9
SELECT *, date_format(date, '%d') AS day, date_format(date, '%m') AS month, date_format(date, '%Y') AS year FRO...
// and paths to my scripts

Это как пицца для пива для хакера.

Как отфильтровать нежелательные символы (например, кавычки), чтобы на странице не отображался мой запрос в БД (возможно, мой собственный текст ошибки)?

Я отключил создание отчетов об ошибках, но это не решение (его нельзя использовать везде).

Ответы [ 3 ]

2 голосов
/ 22 августа 2010
$page = (int) $_GET['page'];

или

$page = preg_replace('~[^0-9]~','',$_GET['page']);
0 голосов
/ 22 августа 2010

Используйте (int) $ _ GET ['page'].Если это не сработает, вы берете URL, что означает, что вам нужно использовать регулярные выражения.Я не понимаю, почему вы хотите получить URL-адрес, поэтому вы должны быть в порядке.

0 голосов
/ 22 августа 2010

Тип приведен к переменной page:

Возможное решение 1:

$page = (int) $_GET['page'];

Контрольный пример:

$str = '45"';
echo (int) $str;

Результат:

45

Возможное решение 2:

Или вы можете отклонить такое недопустимое значение, используя функции is_numeric или ctype_digit:

if (!ctype_digit($_GET['page'])){
   die('Invalid page value !!');
}
else{
 // continue with the query...
}

Возможное решение 3:

Вы можете использовать это регулярное выражение для удаления нежелательных символов:

$page = preg_replace("/[^0-9]+/", "", $_GET['page']);

Обновление:

Для текста вам следует использовать функцию mysql_real_escape_string.

...