| |
|
|
| | День добрый. У меня, как у начинающего, есть вопрос Симдянову И.В. и людям, которые используют этот скрипт непосредственно по назначению:
Как этот скрипт защищает от SQL инъекций, и ввода всяких нехороших символов, если использует только данный проверочны код:
if (!get_magic_quotes_gpc())
{
$_SERVER['PHP_AUTH_USER'] = mysql_escape_string($_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = mysql_escape_string($_SERVER['PHP_AUTH_PW']);
}
$_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
|
А почему же другие люди используют немалый набор всяких ф-ий для проверки, таких как:
function var_db ($text) {
return preg_replace ('/[^а-яa-z0-9_ ,".-@]|insert|delete|update|char|union|--/i', '', $text);
}
|
$login = htmlspecialchars($login, ENT_QUOTES);
|
$login = addslashes($login);
|
$login = stripslashes($login);
|
и т.д.
Прошу прощения, если это очередной глупый вопрос... | |
| |
|
|
| |
|
|
| |
для: provodnik
(20.01.2007 в 16:29)
| | | Для безопасности запроса, как правило достаточно обойтись функцией mysql_escape_string. | |
| |
|
|
| |
|
|
| |
для: provodnik
(20.01.2007 в 16:29)
| | | >А почему же другие люди используют немалый набор всяких ф-ий для проверки, таких как:
1) Одни по привычке
2) Другие просматривая старый код и код первых, тоже пишут.
Понимаете, использование addslashes() и stripslashes() не имеет смысла без использования функции get_magic_quotes_gpc(), которая проверяет включён ли на сервере режим магических кавычек. Функция mysql_escape_string() является практически полным аналогом addslashes(). htmlspecialchars() не удобно использовать перед занесением информации в базу данных (потом информацию не удобно редактировать), её удобнее использовать перед выводом информации в браузер.
Используя регулярное выражение '/[^а-яa-z0-9_ ,".-@]|insert|delete|update|char|union|--/i' разработчики скорее всего хотят одним зайцем исключить SQL-инъекцию по строке и по числовому параметру. Регулярные выражения достаточно ресурсоёмки, поэтому везде их использовать не следует - в авторизации числа не используются, поэтому можно защищаться только от SQL-инъекции по строке.
В представленной систем достаточно защиты, чтобы злоумышленик не смог провести SQL-инъекцию. Разумеется перед выводом в браузер имени пользователя необходимо обработать его при помощи функции htmlspecialchars().
Последовательность
<?php
$_SERVER['PHP_AUTH_USER'] = str_replace("'","`",$_SERVER['PHP_AUTH_USER']);
$_SERVER['PHP_AUTH_PW'] = str_replace("'","`",$_SERVER['PHP_AUTH_PW']);
?>
|
можно убрать - она лишняя.
>Прошу прощения, если это очередной глупый вопрос...
Глупым вопрос является толко в том случае, если человек, спрашивающий его знает на него ответ... если вам что-то не понятно - обязательно спрашивайте, что знаем - расскажем. | |
| |
|
|
| |
|
|
| |
для: cheops
(20.01.2007 в 21:11)
| | | Добавил бы следующее соображение.
Применять вышеозначенное регулярное выражение - значит запретить ввод перечисленных в нем английских слов независимо от того, используются они в SQL-инъекции, в отрывке цитируемого исходника программы, или даже просто в фрагменте обычного человеческого предложения. Об этом моменте, почему-то, эти "другие люди" думать не хотят. | |
| |
|
|
| |
|
|
| |
для: Trianon
(21.01.2007 в 00:14)
| | | >Добавил бы следующее соображение.
>Применять вышеозначенное регулярное выражение - значит запретить ввод перечисленных в нем английских слов независимо от того, используются они в SQL-инъекции, в отрывке цитируемого исходника программы, или даже просто в фрагменте обычного человеческого предложения. Об этом моменте, почему-то, эти "другие люди" думать не хотят.
Эта ф-ия с рег. выражением у меня стоит на проверке логина и пароля. Не думаю, что у Вас, Trianon, пароль или логин содержит перечисленные английские слова...
С уважением... | |
| |
|
|
| |
|
|
| |
для: provodnik
(21.01.2007 в 01:17)
| | | Поскольку я в Ваш круг пользователей не вхожу, то для меня проблемы, как таковой это не предствляет.
А вот Вам придется делать указанное допущение для каждого своего пользователя.
Опять же каждому свое.... | |
| |
|
|