不是偏执狂,我想知道是否直接使用客户端输入字符串操作函数,如 explode(),strpos(),substr(),... 可能是一个安全问题
两年前,我记得读过这些函数中的一些使用了一个对特定条目敏感的库,它可以用来创建新文件等......
我找不到 OWSAP
中提到的任何内容若然,这个版本的PHP会受到什么影响?
修改 我还没有找到确切的答案,但这个关注流程问题与我的关系很接近 question
答案 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_ *函数。