繁体   English   中英

如何保证表格?

[英]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个选择:

  1. 绝对不允许HTML。 使用带有NO允许标记的strip_tags()htmlspecialchars()来转义可能存在于其中的任何标记。

  2. 允许HTML,但您需要清理HTML。 不是你可以用strip_tags做的事情。 使用库(如HTMLPurifier )......

你只需要在打印表单内容之前需要htmlspecialchars,然后在发布到SQL之前使用mysql_real_escape(在打印之前不需要它),你应该很好。

采用自动标记方式非常危险,您需要使用有限属性的允许标记的简短列表 - 这不是您可以在一行中执行的操作。 您可能希望查看HTML规范化器,如Tidy。

  • 使用HTML Purifier进行html输入并删除你不想要的一切 - 除了段落,所有锚点等。

不相关但重要:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM