php防注入 通用,php通用防注入与注入详细说明

php通用防注入主要是过滤一些sql命令与php post get传过来的参考我们/要过滤一些非法字符,这样可以防止基本的注入了,那关第于apache 服务器安装设置方法也是必须的,管理员用户名和密码都采取md5加密,这样就能有效地防止了php的注入.

还有服务器和mysql教程也要加强一些安全防范.

对于linux服务器的安全设置:

加密口令,使用“/usr/sbin/authconfig”工具打开密码的shadow功能,对password进行加密,禁止访问重要文件,进入linux命令界面,在提示符下输入:

#chmod600 /etc/inetd.conf//改变文件属性为600

#chattr +i  /etc/inetd.conf     //保证文件属主为root

#chattr –i  /etc/inetd.conf     // 对该文件的改变做限制

禁止任何用户通过su命令改变为root用户,在su配置文件即/etc/pam.d/目录下的开头添加下面两行:

auth  sufficient  /lib/security/pam_rootok.so debug

auth  required  /lib/security/pam_whell.so group=wheel

删除所有的特殊帐户

#userdel  lp等等 删除用户

#groupdel lp等等  删除组

禁止不使用的suid/sgid程序

#find / -type f (-perm -04000  - o –perm -02000 ) -execls –lg {};代码如下:

$arrfiltrate=array("'",";","union","select","insert","update","delete","load_file","outfile");

//出错后要跳转的url

$strgourl="";

//开源代码最模板zuimoban.com

functionfunstringexist($strfiltrate,$arrfiltrate)

{

foreach($arrfiltrateas$key=>$value)

{

if(eregi($value,$strfiltrate))

{

returntrue;

}

}

returnfalse;

}

//合并$_post 、 $_get和$_cookie

if(function_exists(array_merge))

{

$arrpostgetcookiesession=array_merge($http_post_vars,$http_get_vars,$http_cookie_vars);

$string= implode("",$arrpostgetcookiesession);

}

//验证

if(funstringexist($string,$arrfiltrate))

{

echo"";

}

else

{

echo"";

}

第二款防注入实例,代码如下:

php通用防注入安全代码.

说明:判断传递的变量中是否含有非法字符,如$_post、$_get

功能:防注入.

//要过滤的非法字符

$arrfiltrate=array("'",";","union");

//出错后要跳转的url,不填则默认前一页

$strgourl="";

//是否存在数组中的值

functionfunstringexist($strfiltrate,$arrfiltrate){

foreach($arrfiltrateas$key=>$value){

if(eregi($value,$strfiltrate)){

returntrue;

}

}

returnfalse;

}

//合并$_post 和 $_get

if(function_exists(array_merge)){

$arrpostandget=array_merge($http_post_vars,$http_get_vars);

}else{

foreach($http_post_varsas$key=>$value){

$arrpostandget[]=$value;

}

foreach($http_get_varsas$key=>$value){

$arrpostandget[]=$value;

}

}

//验证开始

foreach($arrpostandgetas$key=>$value){

if(funstringexist($value,$arrfiltrate)){

echo"alert(/"neeao提示,非法字符/");";

if(emptyempty($strgourl)){

echo"history.go(-1);";

}else{

echo"window.location=/"".$strgourl."/";";

}

exit;

}

}

看一下关于注入细节.

转化成ascii后是char(97,108,112,104,97),转化成16进制是0x616c706861,我们将在光盘中提供16进制和ascii转换工具,好了直接在浏览器里输入:

http://localhost/site/admin/login.php?username=char(97,108,112,104,97)%23

sql语句变成:

select * from alphaaut hor where username=char(97,108,112,104,97)# and password=

正如我们期望的那样,他顺利执行了,我们得到我们想要的,当然咯,我们也可以这样构造:

http://www.最模板zuimoban.com/site/admin/login.php?username=0x616c706861%23

sql语句变成:

select * from alphaauthor where username=0x616c706861%23# and password=

我们再一次是成功者了,很有成就感吧,或许你会问我们是否可以把#也放在char()里,实际上char(97,108,112,104,97)相当于 alpha,注意是alpha上加引号,表示alpha字符串,我们知道在mysql中如果执行如下代码:

mysql> select * from dl_users where username=alpha;error 1054 (42s22): unknown column alpha in where clause

看返回错误了,因为他会认为alpha是一个变量,所以我们得在alpha上加引号,代码如下:

mysql> select * from dl_users where username= alpha ;

(责任编辑:最模板)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值