|
|
|
| Приветствую всех,
Возник вопрос по фильтрации переменных и передаваемых в БД значений. Прочитал несколько ответов от cheops'a, но все же осталась некая неясность по этому поводу.
Как все-таки лучше фильтровать переменные номера страницы, чтобы это было безопасно. Функции is_numeric, как я понимаю, будет достаточно? Ведь если $id != числу, то дальнейшее выполнение скрипта можно прекратить и проверка mysql_escape_string'ом уже не будет иметь смысла... Или я не прав? Или нужно фильтровать все preg_match'ем?
Пример: http://example.com/index.php?page=1 - Как лучше отфильтровать эту переменную?
Аналогичный вопрос и по записи/чтению данных из БД. Достаточно ли для этого применять функции mysql_escape_string (запись в БД, магические кавычки выключены) и htmlspecialchars (чтение из БД).
Также мучает вопрос, когда магические кавычки включены - что использовать для фильтрации? Или ничего не нужно?
Пример:
(Запись данных в БД, данные - ИП Адрес + Порт какого-то сервера)
ИП - ххх.ххх.ххх.ххх или ИМЯ ХОСТА
<?
funtion test_func($test_func)
{
$test_func = mysql_escape_string($test_func);
return $test_func;
}
$ip = test_func($_GET[ip]);
$port = test_func($_GET[ip]);
$add = mysql_query("INSERT INTO test VALUES(NULL, '$ip', '$port', UNIX_TIMESTAMP())");
if($add) echo 'Добавлено.';
else echo 'Ошибка.';
?>
|
Всем заранее спасибо за ответы. | |
|
|
|
|
|
|
|
для: man1
(27.01.2009 в 23:08)
| | Да, и еще одно. Как безопаснее всего читать/писать html код в/из базу/базы | |
|
|
|
|
|
|
|
для: man1
(27.01.2009 в 23:13)
| | Товарищи кодеры, где вы все ?)) | |
|
|
|
|
|
|
|
для: man1
(28.01.2009 в 01:23)
| | Все ушли на фронт.
Вместо is_numeric() лучше использовать intval(), а так всё правильно вроде бы. | |
|
|
|
|
|
|
|
для: man1
(27.01.2009 в 23:08)
| | >Функции is_numeric, как я понимаю, будет достаточно?
Если у вас числовой параметр, то да, но лучше действительно пропустить его через intval().
>Также мучает вопрос, когда магические кавычки включены - что использовать для
>фильтрации? Или ничего не нужно?
В случае числового параметра можете об этом не думать (после того как убедитесь, что вам передали действительно число), магические кавычки только на строки влияют. | |
|
|
|
|
|
|
|
для: cheops
(28.01.2009 в 12:59)
| | >>Также мучает вопрос, когда магические кавычки включены - что использовать для
>>фильтрации? Или ничего не нужно?
>В случае числового параметра можете об этом не думать (после того как убедитесь, что вам передали действительно число), магические кавычки только на строки влияют.
А в случае текста и html кода вносимого в базу и читаемого из базы? | |
|
|
|
|
|
|
|
для: man1
(28.01.2009 в 16:46)
| | Достаточно, ведь так? Да что-ж такое, мужики, ссылку что ли подкиньте где уже ответ дан, если обсуждалось -))
Кстати, книги вашей редакции в магазинах почему-то стало очень проблематично найти в магазинах... | |
|
|
|
|
|
|
|
для: man1
(29.01.2009 в 03:20)
| | Вообще то база должна использоваться для хранения информации без разметки, но коли возникла такая потребность, то нужно исходить из того, что храниться она там будет как обычный текст. Соответственно и все принципы сохраняются. Если записано с тегами, с тегами и будет результат. Не станeте обрабатывать htmlspecialchars на выводе - будет с разметкой, обработаете - получите в виде текста. | |
|
|
|
|
|
|
|
для: Николай2357
(29.01.2009 в 08:22)
| | из БД данные будут получены в виде текста в любом случае. | |
|
|
|
|
|
|
|
для: man1
(29.01.2009 в 03:20)
| | ответ не зависит от того, что за значения данных Вы указываете в запросе.
Всё определяется тем, нужно ли по синтаксису обрамлять кавычками эти значения, или нет.
Если нужно - mysql_escape_string так или иначе будет по делу. | |
|
|
|
|
|
|
|
для: Trianon
(29.01.2009 в 12:48)
| | Стесняюсь спросить, а как узнать нужно ли по синтаксису их обрабатывать или нет?
Если не сложно то приведите, пожалуйста, примеры или ссылку на материал, где про это можно почитать. | |
|
|
|
|
|
|
|
для: man1
(28.01.2009 в 16:46)
| | >А в случае текста и html кода вносимого в базу и читаемого из базы?
Это зависит от того, откуда поступает текст или html-код, если со стороны клиента, т.е. из массивов $_GET, $_POST, $_COOKIE - нужен учет режима магических кавычек, если у вас просто строка в PHP-скрипте, например, взятая из файла, то её необходимо обработать при помощи mysql_escape_string() в любом случае - так как режим магических кавычек на такие строки не распространяется. | |
|
|
|
|
|
|
|
для: cheops
(29.01.2009 в 14:47)
| | У меня на одном хостинге магические кавычки выключены, а на другом включены...
Да, и еще, это ведь получается практически все функции для безопасной работы с mysql? =)
Набросал тут код, чтобы иметь представление с чем имеем дело, вот, посмотрите, вполне ли безопасно ниже написанное =) :
<?
# Скрипт 1. Регистрация аккаунта.
# Функция проверки магических кавычек (Где-то тут на форуме валялась ;) )
function is_qutes_on($info) {
if(!get_magic_quotes_gpc()) $info = mysql_escape_string($info);
return $info;
}
# Функция регистрации аккаунта и проверки полей
function reg_user($name, $password, $mail) {
if(isset($name) && isset($password) && isset($mail)) {
$name = is_quotes_on($name);
$password = is_quotes_on($password);
/* проверка емейла */
}
$insert = mysql_query("INSERT INTO test VALUES (NULL, '$name', '$password', '$mail')");
if($insert) $msg = true;
else $msg = false;
return $msg;
}
/* Сама форма регистрации */
echo "
<form action='".$_SERVER[PHP_SELF]."' method='post'>
Name: <input type=text name='name'>
Password: <input type=text name='password'>
Mail: <input type=text name='mail'>
<input type='submit'>
</form>
";
if($submit) {
if(reg_user($_POST[name], $_POST[password], $_POST[mail]) == true) echo 'Регистрация успешно завершена';
else echo echo 'Ошибка';
}
?>
<?
# Скрипт2. Вывод информации об аккаунте.
$select = mysql_query("SELECT * FROM test ORDER BY name");
while($user = mysql_fetch_array($select, MYSQL_ASSOC) {
echo "Информиация: ".htmlspecialchars($user[name])." - ".htmlspecialchars($user[password])." - ".htmlspecialchars($user[mail])."<br>";
}
?>
|
Информация всегда поступает через массивы $_GET или $_POST, бывают также сессии (пароль в мд5 хранится в них, по ним же происходит определение пользователей). | |
|
|
|
|
|
|
|
для: man1
(29.01.2009 в 19:51)
| | =) | |
|
|
|
|
|
|
|
для: man1
(29.01.2009 в 19:51)
| | самое время порешать задачу 21 | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 01:19)
| | Решил, посмотрите, верно ли?) http://www.softtime.ru/forum/read.php?id_forum=7&id_theme=62168 | |
|
|
|
|
|
|
|
для: man1
(31.01.2009 в 21:38)
| | там же и ответил.
Если Вас интересует мой вариант - можете сравнить с решением N5 | |
|
|
|
|
|
|
|
для: Trianon
(31.01.2009 в 23:27)
| | Интересное решение )
$sql = "SELECT *, LENGTH(guestname) as len FROM guests WHERE id = ".intval($id);
|
Дело в том, что я совсем недавно начал осваивать php, в основном по книгам или мануалам с интернета. Скажите, а есть ли в онлайне какая-нибудь приемлемая по написанию книга в электронном виде по MySql запросам и, желательно, в доступной форме? Или лучше все-таки приобрести ее в магазине?
Я также заметил несколько, вроде бы, весьма занятных книг от студии SoftTime здесь на сайте. (http://softtime.ru/php5/index.php) Могли бы вы подсказать мне, какую из них лучше выбрать, если я все-такие буду покупать ее? Заранее спасибо. | |
|
|
|