重燃您的PHP安全之火(3)
2008-02-23 08:21:13来源:互联网 阅读 ()
3、典型的逻辑错误
在一些cms(整站程式)中随便注册个用户,您会发现修改资料的地方不需要输入原来的密码,只通过判断用户id或email,您把网页保存到本地,把id或email改成管理员的,action 改为修改提交地址,提交您就成了管理员。解决办法不太难,只要我们增加密码验证,增强那个mysql的update语句的过滤也就ok了。
这些我们也没办法,多数程式员对于安全根本不去在意,本来一个人能够去做的事,为什么偏偏要分出搞web安全的和web研发两种人呢?
长度问题
别以为找漏洞的就是为了拿个管理员密码或webshell,也有些不安分的人,也就是DDOSer(拒绝服务攻击者),他们的花样很多,但对于程式员来说,关键就在过滤。我所说的长度问题,不但仅是个字符的长度,也包括时间的长度,您一定见过有人写个脚本,一下就注册成千上万的用户,或纯粹的写垃圾数据把数据库拖死。这个时候,限制数据提交时间和验证码就起作用了。但是要真的碰到狠毒的人,一个变量的过滤问题就能够把网站搞瘫痪,这比用什么网络僵尸那些软件来得更快。
不大不小的问题
1、绝对路径的泄露
这个问题可真是不大不小,很多程式都有,这也算安全的一部分。至少您玩注入loadfile()需要吧。当然,这时的php.ini中的display_errors也能够起作用了。
2、对后台的验证
不要说不信,我就曾看到一些程式这样,您去测试,注册个用户,提交管理员编辑用户的URL,比如admin_member.php?action=edit&id=55&level=4&username=zizzy&power=1这样相应的添加管理员的URL,您会发现几乎没验证,直接成功了。所以,对于后台的检测,也很有必要,就像刚出的Discuz的那个漏洞。
过滤问题不知不觉就说了那么多,写了好多处该过滤的提醒,现在也该说说了如何进行过滤。
1、在用户输入任何数据,也就是提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了。其实在涉及到变量取值时,intval()函数对字符串的过滤也是个不错的选择。
2、在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc能够把get,post,cookie里的引号变为斜杠magic_quotes_runtime对于进出数据库的数据能够起到格式话的作用。其实,早在以前注入很疯狂时,这个参数就很流行了。
3、在使用系统函数时,必须使用escapeshellarg(),escapeshellcmd()参数去过滤,这样您也就能够放心的使用系统函数。
4、对于跨站,strip_tags(),htmlspecialchars()两个参数都不错,对于用户提交的的带有html和php的标记都将进行转换。比如尖括号"<"就将转化为 "<"这样无害的字符。
5、对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要您把您所要执行操作的变量指定好或对相关字符过滤严密,我想这样也就无懈可击了。
服务器安全配置
谈服务器安全配置,我觉得很不实际的,我们大多数人都用虚拟主机,对于php.ini怎么设,那个只有网管自己看着办了。但是我还是说下,
1、配置"safe_mode"为"on"
这对于广大空间商来说是个伟大的选项,他能极大地改进PHP的安全性。
2、禁止"open_basedir" ,这个选项能够禁止指定目录之外的文档操作,还能有效地消除本地文档或是远程文档被include()等函数的调用攻击。
3、expose_php设为off ,这样php不会在http文档头中泄露信息。
4、配置"allow_url_fopen"为"off" 这个选项能够禁止远程文档功能,极力推荐
5、"log_errors"为"on" 错误日至得带上吧
6、对于"display_errors,register_globals"两项要视情况而定了,display_errors太消极了,错误全关,想调试脚本都不行。至于register_globals(全局变量)把他开起来,关了会很麻烦,现在大多数程式没他支持就别想用了。
这些是最必要的配置。关于php服务器更高的安全配置是门学问,也就不在本文探讨范围内了。
这篇文章到这里就要结束了,也许您会说,您说的这些都是对开源的程式才有用,对那些zend加密的程式不就没办法可使了吗?其实,对安全来说,固其根本才是重要的吧,您再怎么加密难道逃得过黑盒测试?总有一天会被发现的吧。
限于篇幅也就到这里了,我们对于php程式安全也有了初步的探索。为广大读者朋友考虑,举的例子也算是很容易去理解地,当然前提是您得会点php,要不然又是看天书了(哇,不要看到这里才问我啥是php?)。整篇文章并不是黑客教学,而是为那些想在php安全上发展的初学者和php程式员写的。假如以后您又听到谁谁又发现什么漏洞了,再怎么变也就是那些基本的东西而已。我希望本文能为您们开阔下思路,更好的发展下去。嗜酒成痴剑亦狂,重燃您的php安全之火,带着对php的执着上路吧。
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇: 配置让服务器能够支持shtml文档
下一篇: 优化Apache服务器的重负荷
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash
