如何正确清理用户输出

时间:2011-07-29 08:15:34

标签: php security layout sanitization

所以,我正在一个人们可以创建线程和响应的网站上工作。 到目前为止,在将数据保存到数据库之前我

  • 使用 mysql_real_escape_string 来清理数据
  • 检查文本的行数(必须低于a 给定最大数量,例如最多10行)

在屏幕上显示之前我

  • 使用 htmlentities 来清理HTML数据
  • 使用 nl2br 允许换行
  • 使用 wordwrap 对文字进行自动换行(该行必须至多为75 字符)

恶意用户还有什么其他方法可以解决问题或破坏布局吗?是否有任何特殊的ASCII代码可能会导致问题?感谢。

2 个答案:

答案 0 :(得分:2)

我能想到的另一件事是:如果您的数据库输入是一个数字,请对其进行is_numeric检查(或其他检查是否为小数)。

它可以是一个有效的字符串,但它会破坏你的查询,尽管使用mysql_real_escape_string(假设你使用的是mysql api而不是mysqli api)。

答案 1 :(得分:1)

您遗失的一件事是验证针对whiltelist的不受信任的数据。 mysql_real_escape_string将转义数据但仍可能是您不希望在系统中使用的数据。你最好先描述你允许的内容,并在转义之前拒绝或删除任何其他内容。

请参阅OWASP白名单清除:https://www.owasp.org/index.php/Data_Validation#Sanitize_with_Whitelist