Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Защита скриптов
 
 автор: itica   (10.09.2006 в 17:28)   письмо автору
 
 

Что нужно делать, чтобы защитить скрипты от взлома?
Достаточно ли обрабатывать все выводимые данные функцией htmlspecialchars(); А все данные, которые заносятся в Базу данных обрабатывать функцией mysql_escape_string();

   
 
 автор: Киналь   (10.09.2006 в 18:17)   письмо автору
 
   для: itica   (10.09.2006 в 17:28)
 

Хех, вопрос из серии "Как прожить до ста лет?" =)

На самом деле абсолютной защиты нет, а степеь ее надежности зависит только от развитости паранойи у разработчика:)
Серьезно - ответ "недостаточно". Все, что приходит от пользователя (включая куки) стоит проверять на соответствие ожидаемому типу (число, символ, дробное число, отрицательное, строка), на принадлежность диапазону возможных значений, на соответствие формату (формат e-mail'а, формат url'а); файл проверять на миме-тип, длинный текст на превышение размера.
Если развивать паранойу дальше (это не шутка), можно на "критичные" скрипты типа авторизации ставить тайм-аут выполнения, чтобы исключить возможность брутфорса; форму прошивать сессией и проверять реферер и User-Agent...

Словом, "лучше перебздить, чем недобздить" :)

   
 
 автор: cheops   (10.09.2006 в 21:36)   письмо автору
 
   для: itica   (10.09.2006 в 17:28)
 

>Достаточно ли обрабатывать все выводимые данные функцией htmlspecialchars(); А все данные,
>которые заносятся в Базу данных обрабатывать функцией mysql_escape_string();
Это необходимое условие, но не достаточное. Дыра может быть логической - тут от кода зависит.

   
 
 автор: programmer_2006   (10.09.2006 в 22:26)   письмо автору
 
   для: cheops   (10.09.2006 в 21:36)
 

Слабо.
1)Проверяй поля на соответствие типам.
2)Проверяй и по максимуму ограничуй длину вводимых пользователем данных.
3)Проверяй регулярными выражениями
4)Защита от иньюктивных атак должна быть
5)Используй функции strip_tags(), addslashes, trim, +то что ты применяеш.
Удачи

   
 
 автор: Ziq   (11.09.2006 в 22:42)   письмо автору
 
   для: cheops   (10.09.2006 в 21:36)
 

А не могли бы Вы привести конкретный пример? Все говорят, что небезопасно... а что реально можно сделать, если менять ' на ` и все htmlspecialchar'ить. Заранее огромное спасибо.

   
 
 автор: cheops   (12.09.2006 в 01:13)   письмо автору
 
   для: Ziq   (11.09.2006 в 22:42)
 

Ошибки могут быть самые различные, от неинициализированной переменной и включённой директивы register_globals http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1309, до возможности загрузки на сайт PHP-скриптов через форму для загрузки изображений.

   
 
 автор: P@Sol   (10.09.2006 в 22:36)   письмо автору
 
   для: itica   (10.09.2006 в 17:28)
 

>Что нужно делать, чтобы защитить скрипты от взлома?
код не распространять в инете...чем больше он разойдется..тем серьезнее надо будет его защитить..

   
 
 автор: itica   (10.09.2006 в 22:43)   письмо автору
 
   для: itica   (10.09.2006 в 17:28)
 

Спасибо! Буду соершенстовать защиту. Если будут вопросы напишу.

   
 
 автор: KIM   (11.09.2006 в 08:58)   письмо автору
 
   для: itica   (10.09.2006 в 17:28)
 

$filter_text = substr($_POST['text'],0,10000);
$filter_text = htmlspecialchars(stripslashes($filter_text));
$filter_text = ereg_replace(chr(10),"<br>",$filter_text);
$filter_text = ereg_replace(chr(13),"",$filter_text);
$filter_text = ereg_replace("'","&#39;",$filter_text);
$filter_text = preg_replace("/\S{60,}/","&#34",$filter_text);
$filter_text = trim($filter_text );

А это непотянет для обработки входящего текста???

   
 
 автор: komex   (11.09.2006 в 21:12)   письмо автору
 
   для: KIM   (11.09.2006 в 08:58)
 

А не многовато символов для полученного текста? =)

   
 
 автор: Unkind™   (11.09.2006 в 23:57)   письмо автору
 
   для: KIM   (11.09.2006 в 08:58)
 

KIM, а теперь давайте сократим количество кода...:))


<?php
$text 
mysql_escape_string(nl2br(trim(htmlentities(substr($_POST['text'], 01000)))));
?>

   
 
 автор: KIM   (13.09.2006 в 21:56)   письмо автору
 
   для: Unkind™   (11.09.2006 в 23:57)
 

А это влияет на скорость работы? Если незначительно, то несчитается!

А строки:

$filter_text = ereg_replace(chr(10),"<br>",$filter_text); // Полезая вещь!
$filter_text = ereg_replace(chr(13),"",$filter_text); // Тоже полезна!
$filter_text = ereg_replace("'","&#39;",$filter_text); // Это вообще критично, ибо ' как я заметил мешается, но не обрабатывается спец функцией!
$filter_text = preg_replace("/\S{60,}/","&#34",$filter_text); // Избавление от косых (от перла), и для слов

они ненужны? Ведь это очень нужные вещи!

   
 
 автор: Саня   (14.09.2006 в 00:18)   письмо автору
 
   для: KIM   (13.09.2006 в 21:56)
 

> Это вообще критично, ибо ' как я заметил мешается, но не обрабатывается спец функцией!
А теперь читаем мануал:
'&' (ampersand) becomes '&amp;' 
'"' (double quote) becomes '&quot;' when ENT_NOQUOTES is not set. 
''' (single quote) becomes '&#039;' only when ENT_QUOTES is set. 
'<' (less than) becomes '&lt;' 
'>' (greater than) becomes '&gt;'

Example 2125. htmlspecialchars() example
<?php
$new 
htmlspecialchars("<a href='test'>Test</a>"ENT_QUOTES);
echo 
$new// &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

А mysql_escape_string() вообще лишнее:
<?php
$a 
= array("/""\\");
$b = array("&#47;""&#92;");
if ( 
get_magic_quotes_gpc() ) $text stripslashes($text);
$text str_replace($a$bhtmlspecialchars($textENT_QUOTES));
// и всё!


2 Kero: советую заглянуть в справочник http://php.net/mysql-escape-string

   
 
 автор: Kero   (13.09.2006 в 22:19)   письмо автору
 
   для: Unkind™   (11.09.2006 в 23:57)
 

mysql_escape_string();
Можно спросить-что функция из себя представляет?

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования