Как обезопасить форму? - PullRequest
       42

Как обезопасить форму?

2 голосов
/ 13 августа 2010

Я читал статью о безопасности форм, потому что у меня есть форма, в которую пользователь может добавлять сообщения.

Я прочитал, что лучше всего использовать strip_tags(), htmlspecialchars() и nl2br().Говорят, что где-то еще используется html_entity_decode().

. У меня есть код на моей странице, который принимает пользовательский ввод

<?php 
    $topicmessage = check_input($_POST['message']); //protect against SQLinjection
    $topicmessage = strip_tags($topicmessage, "<p><a><span>");
    $topicmessage = htmlspecialchars($topicmessage);
    $topicmessage = nl2br($topicmessage);
?>

, но когда я повторяю сообщение, оно все на одноми кажется, что разрывы были удалены strip_tags, а не возвращены nl2br().

Для меня это имеет смысл, почему это происходит, потому что, если разрыв был удален, какзнает ли он, куда положить его обратно (или делает это)?

В любом случае, я ищу способ, которым я могу защитить свою форму, чтобы ее можно было использовать, чтобы попытаться взломать сайт, как при использовании javascript в форме.

Ответы [ 3 ]

9 голосов
/ 13 августа 2010

У вас есть 2 варианта:

  1. Разрешить абсолютно без HTML. Используйте strip_tags() с NO разрешенными тегами или htmlspecialchars(), чтобы избежать любых тегов, которые могут быть там.

  2. Разрешить HTML, но вам нужно очистить HTML. Это НЕ то, что вы можете сделать с strip_tags. Использовать библиотеку (например, HTMLPurifier ) ...

0 голосов
/ 13 августа 2010
  • Используйте Очиститель HTML для ввода html и убирайте все, что вам не нужно - все, кроме абзацев, всех якорей и т.д.

Не связано, но важно:

  • sprintf для таких вещей, как "только цифры из этого поля".
  • mysql-real-escape-string.php для всех запросов на вставку в целом.
0 голосов
/ 13 августа 2010

Вам просто нужны htmlspecialchars перед печатью содержимого формы, и mysql_real_escape перед публикацией в SQL (вам это не нужно перед печатью), и вы должны быть хороши.

Выполнение способа добавления тегов очень опасновам нужен короткий список разрешенных тегов с ограниченными атрибутами - это не то, что вы можете сделать в 1 строке.Возможно, вы захотите взглянуть на нормализаторы HTML, такие как Tidy.

...