Как очистить значения HTML POST NicEdit? - PullRequest
1 голос
/ 11 декабря 2011

Я недавно начал использовать NicEdit на моей странице «Ввод статьи». Однако у меня есть несколько вопросов о безопасности и предотвращении злоупотреблений.

Первый вопрос: В настоящее время я очищаю каждый ввод с помощью «mysql_real_escape_string ()» в моем классе базы данных. Кроме того, я очищаю значения HTML с помощью "htmlspecialchars (htmlentities (strip_tags ($ var)))).

Как бы вы продезинфицировали ваши "входы HTML" при добавлении их в базу данных, или как я это делаю, работает идеально?

Второй вопрос: Пока я задавал этот вопрос, возник вопрос с «похожим названием», поэтому я прочитал его один раз. Кто-то говорил о «злоупотреблении вводом HTML», чтобы связываться с его действительным шаблоном. (например, просто введите)

Это может произойти и в моей текущей системе. Как с этим бороться в PHP?

Ps. Я хочу продолжать использовать NicEdit, поэтому последним советом должно быть использование системы BBCode.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 11 декабря 2011
  1. mysql_real_escape_string не является очисткой , оно экранирует текстовые значения для сохранения синтаксиса SQL-запроса допустимым / однозначным / безопасным для инъекций.
  2. strip_tags - это дезинфекция вашей строки.
  3. Выполнение htmlentities и htmlspecialchars по порядку является излишним и может просто исказить ваших данных. Поскольку вы также снимаете метки прямо перед этим, это двойное излишество.
  4. Правило состоит в том, чтобы убедиться, что ваши данные не нарушают синтаксис SQL, поэтому вы должны mysql_real_escape_string один раз , прежде чем вводить данные в запрос. Вы также делаете то же самое, защищая свой синтаксис HTML, путем экранирования HTML-кода перед выводом его в HTML, используя либо htmlspecialchars (рекомендуется) или htmlentities, не оба .
  5. Для более подробного ознакомления со всем этим прочитайте Великий эскапизм (или: что нужно знать, чтобы работать с текстом в тексте) .
  6. Я не знаю NicEdit, но я предполагаю, что он позволяет вашим пользователям стилизовать текст, используя HTML за кулисами. Почему вы убираете HTML из данных тогда? Тогда нет смысла использовать редактор WYSIWYG.
0 голосов
/ 31 декабря 2011

Это функция, которую я использую в одном из моих приложений NICEDIT, и она хорошо работает с кодом, который выходит из nicedit.

function cleanFromEditor($text) { 

    //try to decode html before we clean it then we submit to database
    $text = stripslashes(html_entity_decode($text));

    //clean out tags that we don't want in the text
    $text = strip_tags($text,'<p><div><strong><em><ul><ol><li><u><blockquote><br><sub><img><a><h1><h2><h3><span><b>');

    //conversion elements
    $conversion = array(
        '<br>'=>'<br />',
        '<b>'=>'<strong>',
        '</b>'=>'</strong>',
        '<i>'=>'<em>',
        '</i>'=>'</em>'
    );

    //clean up the old html with new
    foreach($conversion as $old=>$new){
        $text = str_replace($old, $new, $text);
    }   

    return htmlentities(mysql_real_escape_string($text));
} 
...