RegEx, чтобы избежать ввода данных пользователем - PullRequest
0 голосов
/ 31 декабря 2010

После получения ввода от пользователя на моем сервере (с PHP) я делаю следующее:

$safe_input = ereg_replace("[^A-Za-z0-9-]", "", $_GET["input"]); 

Затем я использую переменную $ safe_input для запросов SQL, а также печатаю ее на экране пользователя.

Гарантирует ли это, что никакие внедрения (SQL-инъекции, XSS и т. Д.) Невозможны?

Спасибо

Joel

Ответы [ 2 ]

2 голосов
/ 31 декабря 2010

Хорошо, он гарантирует, что вы разрешаете только AZ (верхний или нижний), цифры и символ «-» в строке $safe_input.

Теоретически, ваш SQLвсе еще может быть заделан кем-то, добавив «-» к входу, чтобы последняя часть оператора была обработана как комментарий SQL.

Что-то столь же простое, как то, что вы опубликовали, не является решениемк внедрению вредоносного кода - и, скорее всего, это вызовет проблемы в будущем, когда вы захотите позволить пользователю отправлять символы, отличные от тех, которые вы явно разрешили.

Вам следует взглянуть на сторонние библиотеки PHP, которыеспециально разбираться с подобными вещами - существует множество способов предотвращения SQL и XSS.Или даже посмотрите на уровень сервера и подумайте о добавлении одного из модулей Apache, доступных для этой задачи (если, конечно, вы используете Apache ...).Пройдя по этому пути, вы будете придерживаться более целостного подхода к защите - и вы будете использовать опыт в этой области, а не пытаться заново изобрести это колесо для вашего проекта.

1 голос
/ 31 декабря 2010

Прежде всего семейство функций ereg устарело, вместо него следует использовать семейство функций preg:


Не ограничение пользователей просто A-Za-z0-9-. Я бы посоветовал вам пойти на:

HTML Purifier соответствует стандартам Библиотека HTML-фильтров написана на PHP. HTML Purifier не только удалит все вредоносный код (более известный как XSS ) с тщательной проверкой,
безопасный, но разрешающий белый список также убедитесь, что ваши документы соответствует стандартам, что-то только достижимо с всеобъемлющим знание спецификаций W3C.

Вы можете настроить, что принимается и что отклоняется.


Интересно:

Интересно отметить, что Kohana улучшенная альтернатива CodeIgniter также поддерживает HTML Purifier для безопасности.


Что касается SQL-инъекция , по крайней мере вы можете использовать функцию mysql_real_escape_string. Лучше всего использовать подготовленные операторы , хотя.

...