|
|
|
| Всем привет.
Потскажите как правельно отфильтровать сообщения в php в чатах.
Знаю только htmlspecialchars но говорят что это легко ломается. | |
|
|
|
|
автор: cheops (из кафе) (24.07.2006 в 16:14) |
|
|
для: 70-й_регион
(24.07.2006 в 15:39)
| | От чего фильтруем и где хранятся сообщения (в файлах или базе данных)? | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(24.07.2006 в 16:14)
| | Сообщения хранятся в файлах и базе фельтруем от влома | |
|
|
|
|
автор: cheops (из кафе) (24.07.2006 в 17:24) |
|
|
для: 70-й_регион
(24.07.2006 в 17:19)
| | Перед помещением в базу данных текст необходимо пропустить через функцию mysql_escape_string(), чтобы предотвратить SQL-инъекцию. Цифры тоже обязательно нужно проверить на предмет того, что это цифра, а не часть SQL-запроса.
А файлы какую структуру имееют? Нет возможности у пользователя вставить лишний пробел, который нарушит структуру файла и вместо одной записи сделает две?
PS перед выводом в окно браузера текст необхдимо прогонять через функцию htmlspecialchars(). | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(24.07.2006 в 17:24)
| | Спасибо понятно.
Файлы использую в чате для хранения всех сообщений за день.
Их кроме меня ни кто не смотрит. | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(24.07.2006 в 17:24)
| | а если использовать htmlspecialchars() с параметром ENT_QUOTES (замена всех кавычек на их коды)? не убережет это от SQL-инъекции?
И еще такой вопрос.
Я обрабатываю все поля ввода перед тем как их поместить в базу следующим образом:
<?
function secure_txt($str){
$str = strip_tags($str);
$str = stripslashes($str);
$str = htmlspecialchars($str, ENT_QUOTES);
return($str);
}
?>
|
Достаточно ли этого? Можно сказать что, в принципе сайт защищен от атак?
И второй вопрос: нужно ли при выводе этих данных из базы применять еще какие-то функции. Или хватит начальной проверки (перед вставкой в базу)? | |
|
|
|
|
автор: cheops (из кафе) (24.07.2006 в 18:18) |
|
|
для: Expier
(24.07.2006 в 18:07)
| | >а если использовать htmlspecialchars() с параметром ENT_QUOTES (замена всех кавычек на их
>коды)? не убережет это от SQL-инъекции?
Не от всякой, от той, которая идёт по числовому параметру (который, как правило, в кавычки не помещается), то может и не уберечь - там SQL-инъекция кавычки неиспользует. | |
|
|
|
|
|
|
|
для: cheops (из кафе)
(24.07.2006 в 18:18)
| | А как тогда защищать числовые данные? Т.е. они в базе должны быть как int? И какая функция обработки должна использоваться.
И тогда ещё: mysql_escape_string и htmlspecialchars - это одно и тоже?
$data = stripslashes($data);
$data = htmlspecialchars($data);
$data=addslashes($data);
$data = mysql_escape_string($data);
|
Такой код может быть универсальной защитой от любых инъекций? | |
|
|
|
|
|
|
|
для: Владимир22
(24.07.2006 в 18:54)
| | Числовые данные можно защитить например при помощи конструкции
<?php
if(!preg_match("|^[\d]+$|",$id_post)) exit();
?>
|
| |
|
|
|