[英]How to secure a form?
我正在阅读一篇关于表单安全性的文章,因为我有一个表单,用户可以在其中添加消息。
我读到最好使用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。
你有2个选择:
绝对不允许HTML。 使用带有NO允许标记的strip_tags()
或htmlspecialchars()
来转义可能存在于其中的任何标记。
允许HTML,但您需要清理HTML。 这不是你可以用strip_tags
做的事情。 使用库(如HTMLPurifier )......
你只需要在打印表单内容之前需要htmlspecialchars,然后在发布到SQL之前使用mysql_real_escape(在打印之前不需要它),你应该很好。
采用自动标记方式非常危险,您需要使用有限属性的允许标记的简短列表 - 这不是您可以在一行中执行的操作。 您可能希望查看HTML规范化器,如Tidy。
不相关但重要:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.