|
|
|
| В одной книге я встретил следующий код:
<?php
foreach ($_POST as $inx => $val) {
$_POST[$inx] = htmlspecialchars($_POST[$inx]);
$_POST[$inx] = ini_get(magic_quotes_gpc)?$_POST[$inx]:addslashes($_POST[$inx]);
}
foreach ($_GET as $inx => $val) {
$_GET[$inx] = htmlspecialchars($_GET[$inx]);
$_GET[$inx] = ini_get(magic_quotes_gpc)?$_GET[$inx]:addslashes($_GET[$inx]);
}
foreach ($_COOKIE as $inx => $val) {
$_COOKIE[$inx] = htmlspecialchars($_COOKIE[$inx]);
$_COOKIE[$inx] = ini_get(magic_quotes_gpc)?$_COOKIE[$inx]:addslashes($_COOKIE[$inx]);
}
?>
|
Автор советует разместить его в отдельном файле и просто подключать инклюдом.
Такой код сгодится для защиты приложения от SQL-инъекции XSS и прочих атак? Или лучше проверять каждый передаваемый параметр самостоятельно, не надеясь на этот код? | |
|
|
|
|
|
|
|
для: denser
(09.03.2011 в 14:49)
| | не сгодится. используются не те функции, фильтровать массивы с вложенностью более 2 уровней вообще не будет | |
|
|
|
|
|
|
|
для: psychomc
(09.03.2011 в 14:56)
| | А какие функции нужно использовать, чтобы приложение обезопасить от инъекций и прочих атак?
Я немного запутался в этой теме, поэтому мне сложно составить целостную картину.
Подскажите, пожалуйста, как лучше обезопасить веб-приложение от атак. | |
|
|
|
|
|
|
|
для: denser
(09.03.2011 в 15:42)
| | Обязательно поможем, но нужно больше подробностей о том, куда потом идут данные. Речь идет о помещении их в базу данных? | |
|
|
|
|
|
|
|
для: cheops
(09.03.2011 в 18:33)
| | Да, о помещении их в базу данных, а также если я вывожу в браузер текст из базы данных. | |
|
|
|
|
|
|
|
для: denser
(10.03.2011 в 14:47)
| | Тогда перед помещением информации в базу данных, необходимо обработать параметры для предотвращаения SQL-инъекций, а перед выводом из базы данных для предотвращения XSS-инъекций.
1) Перед помещением в базу данных. Если речь идет о целочисленных данных, достаточно прогнать их через функцию intval().
<?php
$_POST['id'] = intval($_POST['id']);
?>
|
Если речь идет о строковых данных, то необходимо экранировать спец-символы (в том, случае, если отключен режим магических кавычек).
<?php
// Если режим магических кавычек отключен - экранируем спец-символы
if (!get_magic_quotes_gpc())
{
$_POST['text'] = mysql_escape_string($_POST['text']);
}
?>
|
2) Перед выводом из базы данных. Текст, особенно если его вводит не доверенный человек, желательно прогнать через функцию htmlspecialchar().
<?php
echo htmlspecialchars(stripslashes($text, ENT_QUOTES);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.03.2011 в 14:58)
| | А как быть со страницей авторизации? То есть, есть запись в таблице (пароль и логин), нужно сверить вводимые данные с данными в таблице? | |
|
|
|
|
|
|
|
для: denser
(10.03.2011 в 18:22)
| | Следует поступить, точно так же как с обычной строкой, т.е. подвергнув их следующей проверке
<?php
// Если режим магических кавычек отключен - экранируем спец-символы
if (!get_magic_quotes_gpc())
{
$_POST['login'] = mysql_escape_string($_POST['login']);
$_POST['pass'] = mysql_escape_string($_POST['pass']);
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(10.03.2011 в 18:32)
| | Теперь понятно. Спасибо за помощь. | |
|
|
|
|
|
|
|
для: denser
(10.03.2011 в 18:22)
| | Пароль можно не проверять. Его обычно сначала хешируют, а потом сравнивают полученное значение с записью в таблице.
Поправьте меня, если я ошибаюсь. | |
|
|
|
|
|
|
|
для: hxt
(10.03.2011 в 19:26)
| | Иногда для этого используются SQL-функции, т.е. пароль становится частью запроса, в этом случае его обязательно нужно проверять. | |
|
|
|
|
|
|
|
для: denser
(09.03.2011 в 15:42)
| | непосредственно перед занесением в бд mysql_real_escape_string
непосредственно перед выводом в браузер htmlspecialchars
но есть нюансы. если данные от доверенного источника (например администратора), то тогда htmlspecialchars применять естественно не нужно. и т.п. в общем-то я имею ввиду как раз то, что написал Valick | |
|
|
|
|
|
|
|
для: denser
(09.03.2011 в 14:49)
| | пусть автор сам это размещает,у себя
>>>Или лучше проверять каждый передаваемый параметр самостоятельно........да
И про магические кавычки не забыть | |
|
|
|
|
|
|
|
для: Косорылый
(09.03.2011 в 14:58)
| | магические кавычки их вроде отключили в новой php ? | |
|
|
|
|
|
|
|
для: kvins
(09.03.2011 в 15:00)
| | В любом случае еще полно серверов, которые их поддерживают, поэтому учитывать их в коде приходится. | |
|
|
|
|
|
|
|
для: denser
(09.03.2011 в 14:49)
| | универсальных решений нет, защищать нужно конкретное приложение с набором конкретных входных данных. | |
|
|
|