[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Безопасность входящих данных
kent666
Всем привет :)

Пишу скрип по защите сайта от всевозможных инъекций. Посмотрите может чего не учел)

1. Для SQL инъекций хватит заменить
' "
на спец символы
2. Для XSS инъекций заменить
    <?
?>

php
script
iframe

А при выводе обратно заменить спец символы ' " на обычные
' "








Спустя 2 часа, 44 минуты, 56 секунд (7.12.2011 - 15:06) inpost написал(а):
Зачем что-то менять?
Если мой ник: scriptus , то ты меня заменишь на что?! smile.gif Тут стандартная схема: 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 будут немного растянуты!

Вот кстати класс! Может есть что добавить?
<?php

class
SVV_Textcode
{

private $symbol_input = array(
'"' => '&quot ;',
'<?' => '<?',
'?>' => '?>',
'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> виде

Спустя 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 конкурса ранее был как раз бб-декодер, многие принимали участие.

Спустя 3 минуты, 19 секунд (7.12.2011 - 15:38) kent666 написал(а):
Так а смысл переводить "безопасные символы" типо <b>, если можно их оставить такими же как их внесли а изменить только те которые представляют поавсность

Да каждый раз!
А все равно по другому не получиться. Мы каждый раз проходимся по тексту и ищем новые совпадения (а там их будет не так уж и много до 10)

А вообще что бы было красиво можно в слове script
букву i заменить на і украинскую))) Внешне разницы не будет зато злодейский JS не сработает!!!

Спустя 1 час, 25 минут, 44 секунды (7.12.2011 - 17:03) kent666 написал(а):
А как в функции str_replace сделать так что бы она искала к примеру script без учета регистра (Script)???
Я уже пробовал так
$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 вида
<span style="font-weight: bold;">Текст главной страницы</span>

если убрать специальные символы. Потом вывести в нормальном виде при помощи ББ кодера будет нереально!

Что в этом случае делать?

Спустя 13 минут, 42 секунды (7.12.2011 - 17:35) killer8080 написал(а):
kent666
вместо
 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...

Про бб-коды - отдельная тема.

Спустя 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>

а это уже не то что хотелось бы. Как вариант хочется нейтрализировать не все спец символы, а лишь те комбинации которые могут быть опасными
а именно
    <?
?>

php
script
iframe

и еще обработчики событий
onload, onclick, onchange ... 
в которых может скрываться анонимная функция!!!
но могут быть и скрипты на других языках!! VBA ...
Во многих движках есть такие WYSIWYG редакторы в которых вносишь данные как к примеру в word а он сам потом приобразует его в html !
И как то не вериться что все эти данные проходят без обработки.


Спустя 2 минуты, 13 секунд (10.12.2011 - 20:01) inpost написал(а):
kent666
Я же писал, для этих целей используют bb-теги, как на нашем форуме! [b] - это сделать жирным

Спустя 1 час, 55 минут, 33 секунды (10.12.2011 - 21:56) kent666 написал(а):
inpost это понятно!

Как тогда используют 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: юзерская, или подонкофская, где каждый второй захочет тебе всё поломать, для юзеров возможностей МЕНЬШЕ, и ограничиваются, как на нашем форуме, лишь минимум допустимых возможностей через бб-декодер.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.