|
|
|
| Скажите пожалуйста, нужно и можно ли как то защищать данные передаваемые $_REQUEST[''] | |
|
|
|
|
|
|
|
для: diablo_
(08.11.2006 в 16:09)
| | от кого? | |
|
|
|
|
|
|
|
для: Temnovit
(08.11.2006 в 16:17)
| | мне сказали, что $_REQUEST, это енаследник GET и его тоже нужно защищать от посторонних данных! | |
|
|
|
|
|
|
|
для: Diablo_
(08.11.2006 в 16:34)
| | В массив $_REQUEST копируются параметры из трех мест: из $_GET , из $_POST и из $_COOKIE.
В методах защиты никакой разницы между $_REQUEST и $_GET нет. | |
|
|
|
|
|
|
|
для: Trianon
(08.11.2006 в 16:58)
| | то есть, защищать так же как и гет? | |
|
|
|
|
|
|
|
для: Diablo_
(08.11.2006 в 17:00)
| | именно так. | |
|
|
|
|
|
|
|
для: Trianon
(08.11.2006 в 17:05)
| | То есть вот так:
addslashes(htmlspecialchars($_REQUEST['']));
|
или нет? | |
|
|
|
|
|
|
|
для: Diablo_
(08.11.2006 в 17:10)
| | нет. | |
|
|
|
|
|
|
|
для: Trianon
(08.11.2006 в 17:11)
| | как если не секрет? | |
|
|
|
|
|
|
|
для: Diablo_
(08.11.2006 в 17:13)
| | Как правильно защищать то? | |
|
|
|
|
|
|
|
для: Diablo_
(08.11.2006 в 20:23)
| | Правильно защищать не данные, а поведение скриптов.
Отталкиваться нужно от того, что Вы хотите с данными делать. В каждом конкретном случае.
А бездумно применяя примочки, подобные той, что Вы изобразили, Вы можете данные разве что исказить. Причем подчас - необратимо. | |
|
|
|
|
|
|
|
для: diablo_
(08.11.2006 в 16:09)
| | Что писать, допустим вот в этом случае:
$my->sql_query="select * from base where id='".@$_REQUEST['id']."'";
|
Просто я вообще не в курсе! | |
|
|
|
|
|
|
|
|
для: Shiva
(08.11.2006 в 22:10)
| | Тогда объясните мне пожалуйста вот это:
PHP обладает несколькими функциями, позволяющими значительно облегчить задачу защиты Web-приложений. Одной из таких функций является htmlspecialchars() которая гарантирует, что любой введенный пользователем код (php, javascript и т.д.) будет отображен, но выполняться не будет. Функция имеет следующий синтаксис:
вот и зачем мне после этого, делать ещё что то? Это функция обезопасит данные! | |
|
|
|
|
|
|
|
для: Diablo_
(08.11.2006 в 21:43)
| | В данном конкретном случае можно предположить что id - целое число
Тогда можно написать так:
$id = @intval( $_REQUEST['id'] );
$my->sql_query="select * from base where id=$id";
|
(в варианте с текстовой строкой всё будет совершенно иначе.)
Но и этот пример не гарантирует, что этот код и эти данные не используют для взлома.
Например, подставив id записи, которую по причинам безопасности нельзя показывать текущему пользователю, оный может получить конфиденциальные данные. | |
|
|
|
|
|
|
|
для: Trianon
(08.11.2006 в 23:34)
| | $id = @intval( $_REQUEST['id'] ); - а зачем "собака"? ;) Эта функция никогда ошибку не вернет... | |
|
|
|
|
|
|
|
для: Unkind
(09.11.2006 в 00:15)
| | Это для блокировки диагностики о возможном отсутствии $_REQUEST['id'] | |
|
|
|
|
|
|
|
для: Trianon
(09.11.2006 в 00:50)
| | 1. но id то может быть и числовий и буквенный
2. лично я так себе это представлял, елси информацию поступающию от юзера заковычить и заслешить, то она не будет представлять опасности! Это же тоже самое что попытаться вывести переход строки
"<br>" // выводит переход на следующию строку
""<br>"" // выводит "<br>"
|
или нет?
Там в этой статье про безопасность написано, что эти функции применяются для обеззараживания информации. | |
|
|
|
|
|
|
|
для: Diablo_
(09.11.2006 в 02:03)
| | Сама по себе информация никакой опасности не представляет.
Опасность представляет неадекватная обработка информации.
> "<br>" // выводит переход на следующию строку
> ""<br>"" // выводит "<br>"
Ни та ни другая конструкция не выведут ничего. Поскольку не являются операторами вывода.
Вторая строка не является даже корректным выражением.
>Там в этой статье про безопасность написано, что эти функции применяются для
"Эти" функции применяются совсем для других (более того - совершенно различных) целей.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Trianon
(09.11.2006 в 10:10)
| | Скажите пожалуйста, а разве не достаточно только вот этой функции?
$text = preg_replace("/[^a-z0-9]/i", "", $_POST['textfield']);
|
она ведь уберёт все символы кроме букв и цифр?! Зачем тогда делать ещё что-то? | |
|
|
|
|
|
|
|
для: Diablo_
(09.11.2006 в 11:12)
| | Функцией intval я отсек и буквы тоже. И даже изрядную долю цифр.
[поправлено модератором] | |
|
|
|
|
|
|
|
для: Trianon
(09.11.2006 в 11:22)
| | Ну а если нужны и буквы и цифры? | |
|
|
|
|
|
|
|
для: Diablo_
(09.11.2006 в 11:38)
| | А если помимо них нужны кавычки, слэши, угловые скобки, которых Вы так боитесь?
Если нужны русские буквы, в конце концов? Можно подумать, Ваш preg_replace их пропустит. | |
|
|
|
|
|
|
|
для: Trianon
(09.11.2006 в 11:39)
| | но intval вообще не пропускает буквы! | |
|
|
|
|
|
|
|
для: Diablo_
(09.11.2006 в 11:12)
| | А Вы чего боитесь? SQL Injection? Тогда обрабатывайте те данные, которые ДОЛЖНЫ быть целыми числами функцией intval() или так:
<?php
$id = (int) $_GET['id'];
?>
|
Если, к примеру, это число с плавающей точкой, то floatval() или
<?php
$float_var = (float) $_GET['float'];
?>
|
Во всех остальных случаях те данные, которые будут зайдествованы в MySQL-запросах следует обрабатывать так:
<?php
if(!get_magic_quotes_gpc())
{
$string = mysql_escape_string($string);
}
?>
|
она ведь уберёт все символы кроме букв и цифр?! Зачем тогда делать ещё что-то?
Вы должны точно знать, зачем Вы делаете то или иное действие с переменной. Если Вы просто понаберете функций и с их помощью будете обрабатывать бедную переменную, то Вы никогда не поймете как ломают Ваши скрипты.
P.S. А Вы "плохие символы" для какой-то цели фильтруете?
P.P.S. но intval вообще не пропускает буквы!
Так Вам её и не затем посоветовали. | |
|
|
|