![]() |
Защита от SQL-enjection
Короче нужна такая функция, которай я передаю переменную, а она ее обрабатывает и делает безопасной от XSS и SQL-enjection. Функция должна изменять переменную в своем теле (по ссылке), и если переменная была опасна вернуть TRUE иначе FALSE.
Вот что получилось у меня: Код:
<?phpКод:
$name=$_POST["name"];Я фигово разбираюсь во всех атаках, поэтому прошу добавить/исправить код, чтобы он был неуязвим )) даже в том случае, если эту переменну прийдеться использовать дальше как в БД, так и выводить в страницу. |
ИМХО Проще не замарачиваться, а пользоваться функциями ereg() и htmlspecialchars(), проще явно указать - что можно, а не то что нельзя использовать, а в твоём случае пройдёт такой запрос -
Код:
union select 1,2,3,4,5#Код:
if(!ereg("[A-Za-z]{1,8}",$name) |
да сопри из любого форума или КМС, так есть такие функции, просто иногда забывают их применять к переменным
|
спасибо, решил использовать вместо strpos функцию ereg, а вместо str_replace ereg_replace. Тока недоганю как составить правильный шаблон для функций ereg. Помогите плз, чтобы он пропул русские, английские буквы, точку, запятую и цифры. Как должен выглядеть шаблон
Цитата:
|
Simple Machine Forums
Код:
function db_query($db_string, $file, $line) |
Код:
if(!ereg("[А-Яа-яa-zA-Z0-9]{1,8}",$_POST['post'])){echo "Error";exit;} |
2Гема
и что это? Эта функция очень далека от того, что надо мне? |
Цитата:
|
Нет тут, только - точка, запятая, кавычка, всё остальное добавляешь в квадратные скобки подряд, только дефис нужно обязательно в конец.
P.s. пробел тоже надо вставлять сори не ту строку те кинул вот - if(!ereg("[А-Яа-яa-zA-Z0-9',.; -]{1,8}",$_POST['post'])){echo "Error";exit;} |
Цитата:
|
2Termin@L
Спасибо братик. А как юзать ereg_replace, чтобы заменить все опасные символы на "". Типа так: Код:
if(!ereg("[А-Яа-яa-zA-Z0-9]{1,8}",$value))Что-то вот так, не заменяется символы в строке Код:
function filter(&$value) |
Зако писал антихак систему ) в принципе чуток доработать под сеья и норм
|
Короче вот что получилось. Прошу сказать, возможен ли обход, если да, то что надо поправить, чтобы все было пучком?
Код:
function filter(&$value) |
Читаю ваши куски и думаю: то ли я совасем дурак, то ли вы:
не легче ли просто нормально добавлять запись в базу? И ВСЕ! Нахер вырезать из запроса какие-то символы? Нахер проверять запрос? СУБД - она на то и СУБД, что может принять все данные, причем делать это правильно. Наша задача - просто правильно их ей передать. |
Да, обход возможен. Возможна sql-inj в целочисленном параметре скрипта, где не требуется кавычка для выхода за пределы значения в запрос.
|
Имхо самая простая защита от sql это
PHP код:
От XSS думаю htmlspecialchars(); спасет, хотя иногда лучьше ereg() |
Код:
<?php |
Цитата:
|
Цитата:
|
Вот мой способ предотвратить какие либо попытки SQL injection или XSS
PHP код:
А если идет запись данных в базу то вот пример работы скрипта: PHP код:
|
Ну вы и норкоманы.... определенно начитались Фленова =)
Я подобное Г только у него в книге видел =) Нормальный код(практически) в этой теме только у p-range. Остальные просто не понимают, что делают. |
Вооооот: http://forum.antichat.ru/thread30641.html
|
Цитата:
Лучше уж прегматч использовать |
PHP код:
|
Цитата:
Кстати, mysql_escape_string, как и все ф-ции mysql_* юзают апи mysql сервера, тоисть требуют аккаунт и подключение к субд. Вместо этого нашел офигенную штуку в zf PHP код:
|
Цитата:
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
|
мдээ...
Читайте статью от нерезуса. И не нужны какие-нибудь сверх способы устранения всех уязвимостей сразу. |
>> Представь себе кой нибудь средний нагруженый проект ~50 запросов в секунду. Кроме самого запроса на выборку/апдейт/удалейние и т.д. скрипт ещё 50 раз дергнет mysql чтоб он заэскейпил твою переменню. И это только за 1 запрос
Переменная обработалась один раз в начале скрипта. Хоть запросов будет миллион, какая разница? >> тьфу. имел ввиду mysql_result Да тоже самое по сути. Тут идёт речь о защите от скуль инъекций, и о том в каком виде надо давать данные на запрос. Про аргументы функций тут речь не идёт. |
Цитата:
Правда заметил что речь идет о не mysql_real_* ф-ции, которая действительно не требует подключения к бд, к тому же устарела еще с 4й версии + и будет генерировать нотис при ее исползовании в следующем релизе пхп Цитата:
Цитата:
Цитата:
|
хотите защиту он от скуль ????
http://il.php.net/manual/ru/function.mysql-real-escape-string.php рименение mysql_real_escape_string() к каждой переменной, вставляемой в запрос, предотвращает SQL Injection. Нижеследующий код является наилучшим вариантом составления запросов и не зависит от установки Magic Quotes. Запрос, составленный таким образом, будет выполнен без ошибок, и взлом с помощью SQL Injection окажется невозможен. PHP код:
PHP код:
|
EXSlim, я про так называемый "скрипт" от b3
Всё, что нужно знать ТС написано нерезусом: Цитата:
|
Цитата:
почитал пример на php.net? почитай еще и примечания к этой ф-ции |
Цитата:
|
Замечание: mysql_real_escape_string() не экранирует символы % и _. Эти знаки являются масками групп символов в операторах MySQL LIKE, GRANT или REVOKE.
Поэтому нада уметь иногда включать мозг ... да и ваще скоко не писал никогда не использовал эти операторы =) да и темболее с подстовлением данных от пользователя ... |
Цитата:
Цитата:
|
Цитата:
функция mysql_real_escape_string() именно с применением этих символов? или иначе.. |
А нельзя ли действовать по принципу KISS [http://ru.wikipedia.org/wiki/Принцип_KISS]?
Каждый метод защиты для каждого случая разный. Если напрягает дополнительная нагрузка на базу - юзайте mysql_escape_string() EXSlim, твой метод бредовый, так как он проверяет не сами данные, а их тип, а затем делает ненужную фильтрацию. |
Цитата:
Цитата:
|
| Время: 11:06 |