在使用诸如explode(),strpos(),substr()之类的函数之前,是否应该对用户数据进行清理

时间:2013-01-24 17:42:17

标签: php security sanitization input-sanitization

不是偏执狂,我想知道是否直接使用客户端输入字符串操作函数,如 explode(),strpos(),substr(),... 可能是一个安全问题

两年前,我记得读过这些函数中的一些使用了一个对特定条目敏感的库,它可以用来创建新文件等......

我找不到 OWSAP

中提到的任何内容

若然,这个版本的PHP会受到什么影响?

修改 我还没有找到确切的答案,但这个关注流程问题与我的关系很接近 question

4 个答案:

答案 0 :(得分:2)

我已经完成了PHP开发多年并且让关注安全性的人员审查了我的代码,但我还没有听说过任何这样的需求。所以我怀疑在将原始用户输入传递给这些之前你不需要做任何卫生。

在构建进一步评估的任何内容(如SQL或HTML)之前,您当然需要始终清理用户控制的变量(以及其他所有其他形式)。

在获取值时检查有效性,在使用它们构建事物时进行消毒和转义。不要在两者之间做事。

答案 1 :(得分:2)

  

两年前,我记得读过这些函数中的一些使用了一个对特定条目敏感的库,它可以用来创建新文件等......

你记错了。 PHP的字符串处理函数,例如substr()explode(),对格式错误的输入不敏感 - 它们将始终对传入的字符串执行预期的操作。你接下来要做什么结果是您自己的业务,您可能仍需要在适当的位置进一步转义/过滤/编码/修改字符串。但字符串函数很好。

你可能正在考虑其他一些功能或库,但我无法想象它是什么。现在我只想说你没有什么可担心的。

答案 2 :(得分:2)

如果要将相关数据插入数据库,那么是的,它应该总是被消毒。

然而,尝试解决有关何时清理数据的问题,特别是在操纵它时,在爆炸时,爆炸等等。

这一切都取决于你处理的数据,并且在你的问题中没有一个好的例子,这只是猜测...但是,我通常每次都会先进行卫生处理。基本上,如果您担心字符串操作函数中可能存在漏洞,请先对字符串进行清理。

安全永远不会过度或过度补偿。通过提高您的安全性(我的意思是微小的),您添加的微小负载远远超过了您自己有信心的系统。

首先基本保护它,担心你之后是否需要它!

答案 3 :(得分:0)

如果用户输入已插入到数据库中,则必须进行SANITIZED 还有一点:http://bobby-tables.com/

如果没有将用户输入插入到数据库中,让用户写下他们想要的任何东西,它不会对你的脚本造成任何伤害,而且我相对肯定mysql_real_escape_string()仅在与之前建立的数据库连接时才有效否则会抛出错误。如果我错了,请纠正我。

就此而言,我可以覆盖所有内容。如果要连接到数据库,请务必使用PDO连接或mysqlite。至于进一步防止SQL注入和不推荐使用MYSQL_ *函数。