php中的安全首选项,php函数来清理输入

时间:2011-10-24 13:10:34

标签: php mysql security

我有以下功能来清理来自用户或网址的输入:

   function SanitizeString($var)
   {
       $var=stripslashes($var);
       $var=htmlentities($var, ENT_QUOTES, 'UTF-8');
       $var=strip_tags($var);
       return $var;
   }

我不知道除了这个php函数之外是否还要使用该函数:

mysql_real_escape_string()..

我也不知道我是否采取了所有预防措施来消毒该输入

我也有剥离标签的问题。因为我使用的是tiny_MCE ..而且不剥离它们很重要..

如何将html字符的状态作为html字符返回到数据库之前返回?

3 个答案:

答案 0 :(得分:2)

消毒输入先验,无论如何,都是错误的。剥离标签与数据库有什么关系?从什么时候恶意脚本在数据库中运行? 过度谨慎是一件好事,除非你在没有逻辑的情况下这样做。

仅根据“可疑”内容需要去的地方进行消毒。

数据库?然后为数据库转义,以避免SQL注入。使用mysql_real_escape_string()或参数化查询即可设置。

Html页面?清理你的HTML,以避免XSS和其他令人讨厌的事情。使用htmlentities()或其他更复杂的解决方案,但必须在输出之前完成。

如果你在你的数据库中保存一个html页面,然后你删除所有标签怎么办(btw,strip_tags()这个工作很糟糕,并且在htmlentities()之后调用它不是最好的事情)?如果你以后需要html回来怎么办?试想一下,数据库使用<script>标签或链接到malaware有什么危害?它们只有在页面上打印时才有害吗?

要解码表单htmlentities(),只需使用.. html_entity_decode()

答案 1 :(得分:0)

在(MYSQL)数据库中存储内容时,您需要使用mysql_real_escape_string。如果您正在使用PDO和准备好的声明,PDO将为您提供转发服务。这可以保护您免受SQL注入攻击。

当您打印用户生成的内容(文本,评论等)时,您需要在输出任何内容之前使用htmlspecialcharshtmlentitites等。哪一个适合取决于您的使用案例。无论你决定什么,你只需要一个。这将保护您免受XSS攻击。

只要magic quotes are disabled,您就永远不需要stripslashes等。

答案 2 :(得分:0)

如果您正在讨论如何清理在将其放在屏幕上之前出现的HTML(您在问题中没有提到但在评论中没有提到),那么它比您想象的要复杂得多

看看: http://iamcal.com/publish/articles/php/processing_html/http://www.iamcal.com/publish/articles/php/processing_html_part_2/