Пишу скрип по защите сайта от всевозможных инъекций. Посмотрите может чего не учел)
1. Для SQL инъекций хватит заменить
' "на спец символы
2. Для XSS инъекций заменить
<?
?>
php
script
iframe
А при выводе обратно заменить спец символы ' " на обычные
' "
Спустя 2 часа, 44 минуты, 56 секунд (7.12.2011 - 15:06) inpost написал(а):
Зачем что-то менять?
Если мой ник: scriptus , то ты меня заменишь на что?! Тут стандартная схема: mysql_real_escape_string, htmlspecialchars, int и всё!
Если мой ник: scriptus , то ты меня заменишь на что?! Тут стандартная схема: mysql_real_escape_string, htmlspecialchars, int и всё!
Спустя 9 минут, 40 секунд (7.12.2011 - 15:16) m4a1fox написал(а):
Тоже считаю что вполне достаточно обойтись встроенными возможностями php!
Спустя 4 минуты, 25 секунд (7.12.2011 - 15:20) Белый Тигр написал(а):
Согласен с inpost. Не нужно ничего в поступающих данных заменять, занимайтесь экранированием опасных символов и всё. Вырезанием вы лишь пользователям проблемы доставляете.
Спустя 1 минута, 11 секунд (7.12.2011 - 15:21) kent666 написал(а):
Оно то так.
Но есть но!!!
У меня в CMS есть редактор через который вноситься HTML-текст. Если потом данный текст обработать mysql_real_escape_string, htmlspecialchars, int
то при выводе данного текста будет куча непонятных для людей символов!
А так будет нормальный красивый текс, правда PHP и SCRIPT будут немного растянуты!
Вот кстати класс! Может есть что добавить?
index.php
Но есть но!!!
У меня в CMS есть редактор через который вноситься HTML-текст. Если потом данный текст обработать mysql_real_escape_string, htmlspecialchars, int
то при выводе данного текста будет куча непонятных для людей символов!
А так будет нормальный красивый текс, правда PHP и SCRIPT будут немного растянуты!
Вот кстати класс! Может есть что добавить?
<?php
class SVV_Textcode
{
private $symbol_input = array(
'"' => '" ;',
'<?' => '<?',
'?>' => '?>',
'php' => 'p &nbs p; h &nbs p; p',
'script' => 's &nbs p; c &nbs p; r &nbs p; i &nbs p; p &nbs p; t',
);
private $symbol_output= array(
'&quo t;' => '"'
);
public function input($text)
{
foreach ($this->symbol_input as $var => $val)
{
$text = str_replace($var, $val, $text);
}
return $text;
}
public function output($text)
{
foreach ($this->symbol_output as $var => $val)
{
$text = str_replace($var, $val, $text);
}
return $text;
}
index.php
include SVV_ROOT."SVV_Textcode.php";
$obj = new SVV_Textcode();
$a = 'Проба 1 = " Проба 2 = <? Проба 3 = ?> Проба 4 = php Проба 5 = script';
$b = $obj->input($a);
$c = $obj->output($b);
echo $a." <br/> ". $b. " <br/>" . $c;
Спустя 3 минуты, 31 секунда (7.12.2011 - 15:25) kent666 написал(а):
Если сделать так то весь html будет выводиться в
нормальном виде
а не в
<b>нормальном</b> виде
нормальном виде
а не в
<b>нормальном</b> виде
Спустя 5 минут, 43 секунды (7.12.2011 - 15:31) Dezigo написал(а):
public function input($text)
{
foreach ($this->symbol_input as $var => $val)
{
$text = str_replace($var, $val, $text);
}
return $text;
}
public function output($text)
{
foreach ($this->symbol_output as $var => $val)
{
$text = str_replace($var, $val, $text);
}
return $text;
}
Каждый раз переменая $text - перезаписывается.
Спустя 3 минуты, 42 секунды (7.12.2011 - 15:34) inpost написал(а):
bb-декодер. Тебе надо не <b> хранить, а [ b] . Понимаешь? Если нет, то:
1) irbis-team.com
2) Конкурсы у нас в разделе конкурсы, посмотри, где-то 3-4 конкурса ранее был как раз бб-декодер, многие принимали участие.
1) irbis-team.com
2) Конкурсы у нас в разделе конкурсы, посмотри, где-то 3-4 конкурса ранее был как раз бб-декодер, многие принимали участие.
Спустя 3 минуты, 19 секунд (7.12.2011 - 15:38) kent666 написал(а):
Так а смысл переводить "безопасные символы" типо <b>, если можно их оставить такими же как их внесли а изменить только те которые представляют поавсность
Да каждый раз!
А все равно по другому не получиться. Мы каждый раз проходимся по тексту и ищем новые совпадения (а там их будет не так уж и много до 10)
А вообще что бы было красиво можно в слове script
букву i заменить на і украинскую))) Внешне разницы не будет зато злодейский JS не сработает!!!
Да каждый раз!
А все равно по другому не получиться. Мы каждый раз проходимся по тексту и ищем новые совпадения (а там их будет не так уж и много до 10)
А вообще что бы было красиво можно в слове script
букву i заменить на і украинскую))) Внешне разницы не будет зато злодейский JS не сработает!!!
Спустя 1 час, 25 минут, 44 секунды (7.12.2011 - 17:03) kent666 написал(а):
А как в функции str_replace сделать так что бы она искала к примеру script без учета регистра (Script)???
Я уже пробовал так
но не работает!
И вообще я в правильном направлении двигаюсь???
В ББ кодере много лишнего! А мне всего лишь надо сделать так что бы текст был безопасным и максимально приближен к первоначальному!!!
:unsure:
Я уже пробовал так
$text = str_replace('#script#i', $val, $text);
но не работает!
И вообще я в правильном направлении двигаюсь???
В ББ кодере много лишнего! А мне всего лишь надо сделать так что бы текст был безопасным и максимально приближен к первоначальному!!!
:unsure:
Спустя 2 минуты, 53 секунды (7.12.2011 - 17:06) inpost написал(а):
kent666
Нет, потому что начнут искать лазейку в подмене. К тому же запутаешься потом: "поиск", "авторизация". Совсем не в том направлении.
Нет, потому что начнут искать лазейку в подмене. К тому же запутаешься потом: "поиск", "авторизация". Совсем не в том направлении.
Спустя 15 минут, 9 секунд (7.12.2011 - 17:22) kent666 написал(а):
Понятно.
Блин а у меня редактор сохраняет html вида
если убрать специальные символы. Потом вывести в нормальном виде при помощи ББ кодера будет нереально!
Что в этом случае делать?
Блин а у меня редактор сохраняет html вида
<span style="font-weight: bold;">Текст главной страницы</span>
если убрать специальные символы. Потом вывести в нормальном виде при помощи ББ кодера будет нереально!
Что в этом случае делать?
Спустя 13 минут, 42 секунды (7.12.2011 - 17:35) killer8080 написал(а):
kent666
вместо
можно просто
а для регистронезависимой замены str_ireplace()
вместо
foreach ($this->symbol_output as $var => $val)
{
$text = str_replace($var, $val, $text);
}
можно просто
$text = str_replace(array_keys($this->symbol_output), $this->symbol_output, $text);
// или
$text = strtr($text, $this->symbol_output);
а для регистронезависимой замены str_ireplace()
Спустя 9 минут, 25 секунд (7.12.2011 - 17:45) kent666 написал(а):
killer8080 Спасибо!
Спустя 5 часов, 26 минут, 40 секунд (7.12.2011 - 23:11) neadekvat написал(а):
Че-то я не понял про "непонятные символы".
При занесении в бд используем mysql_real...
При выводе - html_special...
Про бб-коды - отдельная тема.
При занесении в бд используем mysql_real...
При выводе - html_special...
Про бб-коды - отдельная тема.
Спустя 2 дня, 20 часов, 47 минут, 6 секунд (10.12.2011 - 19:58) kent666 написал(а):
проблема в том что если мы заносим в БД символы обработанные mysql_real...
а при их выводе используем html_special...
то все XSS инъекции будут работать! Типо <script> .... </script>
если же мы не будем использовать html_special... при выводе, то вся красота текста потеряется!!! Так как редактор на сайте сохраняет текст в виде html то текст вида
Текст главной страницы
будет выглядеть так
<span style="font-weight: bold;">Текст главной страницы</span>
а это уже не то что хотелось бы. Как вариант хочется нейтрализировать не все спец символы, а лишь те комбинации которые могут быть опасными
а именно
и еще обработчики событий
но могут быть и скрипты на других языках!! VBA ...
Во многих движках есть такие WYSIWYG редакторы в которых вносишь данные как к примеру в word а он сам потом приобразует его в html !
И как то не вериться что все эти данные проходят без обработки.
а при их выводе используем html_special...
то все XSS инъекции будут работать! Типо <script> .... </script>
если же мы не будем использовать html_special... при выводе, то вся красота текста потеряется!!! Так как редактор на сайте сохраняет текст в виде html то текст вида
Текст главной страницы
будет выглядеть так
<span style="font-weight: bold;">Текст главной страницы</span>
а это уже не то что хотелось бы. Как вариант хочется нейтрализировать не все спец символы, а лишь те комбинации которые могут быть опасными
а именно
<?
?>
php
script
iframe
и еще обработчики событий
onload, onclick, onchange ...в которых может скрываться анонимная функция!!!
но могут быть и скрипты на других языках!! VBA ...
Во многих движках есть такие WYSIWYG редакторы в которых вносишь данные как к примеру в word а он сам потом приобразует его в html !
И как то не вериться что все эти данные проходят без обработки.
Спустя 2 минуты, 13 секунд (10.12.2011 - 20:01) inpost написал(а):
kent666
Я же писал, для этих целей используют bb-теги, как на нашем форуме! [b] - это сделать жирным
Я же писал, для этих целей используют bb-теги, как на нашем форуме! [b] - это сделать жирным
Спустя 1 час, 55 минут, 33 секунды (10.12.2011 - 21:56) kent666 написал(а):
inpost это понятно!
Как тогда используют WYSIWYG редактор на сайте если он сохраняет текст в таком виде
Даже в Ирбисе при сохранении на статистических страницах данные $POST не обрабатываются ничем! только убиваются магические кавычки
Меня это смущает! :huh:
Как тогда используют WYSIWYG редактор на сайте если он сохраняет текст в таком виде
<span style="font-weight: bold;">Текст главной страницы</span>
Даже в Ирбисе при сохранении на статистических страницах данные $POST не обрабатываются ничем! только убиваются магические кавычки
/**
* Edit page
* Редактируем страницу
*/
if($ok)
{
file_put_contents(IRB_ROOT .'setup/'. $GET['id'] .'.txt', $POST['value1']);
reDirect();
}
Меня это смущает! :huh:
Спустя 44 минуты, 44 секунды (10.12.2011 - 22:41) inpost написал(а):
kent666
Есть 2 формы:
форма №1: админская, это значит, что админ не будет делать НИКАКИХ подмен и попыток взлома, значит XSS не за чем бояться и можно допустить прямую вставку HTML кода.
форма №2: юзерская, или подонкофская, где каждый второй захочет тебе всё поломать, для юзеров возможностей МЕНЬШЕ, и ограничиваются, как на нашем форуме, лишь минимум допустимых возможностей через бб-декодер.
Есть 2 формы:
форма №1: админская, это значит, что админ не будет делать НИКАКИХ подмен и попыток взлома, значит XSS не за чем бояться и можно допустить прямую вставку HTML кода.
форма №2: юзерская, или подонкофская, где каждый второй захочет тебе всё поломать, для юзеров возможностей МЕНЬШЕ, и ограничиваются, как на нашем форуме, лишь минимум допустимых возможностей через бб-декодер.