PHP安全 - 消毒和清洁

Adi*_*dil 2 php security

我在http://www.verot.net/php_class_upload.htm上有一个围绕class.upload构建的脚本

基本上我的所有图像都存储在服务器上的一个名为的目录中 /images/

我构建的脚本基本上从我的网站获取一些参数,如 /xyzDir/tomnjerry.jpg?w=100&h=100&fill=1&color=fff

然后我有mod_rewrite将文件从/xyzDir/php脚本中读取,然后转换宽度和高度并返回图像.

最近我注意到土耳其的一些白痴试图将怪异的字符输入参数w=h=

在我的脚本上,我确保检查以确保宽度中只允许整数,高度和填充可以是1或2,颜色只能是我通过数组检查的特定值.

我只是想看看是否还有其他什么我应该做以避免被黑客入侵.

谢谢

irc*_*ell 10

永远记住,为所有用户提供(或不可信)的输入,过滤,退出.

读取用户提供的数据时,将其过滤为已知值. 不要黑名单! 永远永远永远永远列入白名单,你期望得到什么.如果您期望十六进制数,请使用以下正则表达式进行验证:^[a-f0-9]+$.弄清楚你的期望,并过滤掉.你的文件名没有任何东西,只有alpha,numeric和.?然后过滤到^[a-z0-9.]+$.但是,不要开始考虑将事情列入黑名单.它不会起作用.

使用用户数据时,请正确使用它以供手头使用.如果它在数据库中,则将其绑定为参数化查询,或者使用数据库的转义函数将其转义.如果您正在调用shell命令,请将其转义escapeshellarg().如果您正在使用正则表达式模式,请使用它preg_quote().还有更多,但你明白了.

输出用户数据时,请将其正确地转义为您输出的格式.如果要将其输出为HTML或XML,请使用htmlspecialchars().如果由于某种原因输出到原始标题,请转义任何换行符(str_replace(array("\r", "\n"), array('\r', '\n'), $string)).等等等

但总是使用白名单进行过滤,并始终使用正确的上下文方法进行转义.否则很有可能你会错过一些东西......

  • hex是0-9 af ...所以^ [a-z0-9] + $应该是^ [a-f0-9] + $ (2认同)