如何将sql注入
PHP网站?有办法破解防御吗?
网站的运行安全是每个站长必须考虑的问题。众所周知,黑客攻击网站大多采用sql注入的方式,这也是为什么我们常说最原始、最静态的网站是最安全的。今天我们来谈谈PHP注入的安全规范,防止你的网站被sql注入。
当今主流的网站开发语言是php,那么我们先从php网站如何防范sql注入说起:
php注入的安全注意事项通过以上过程,我们可以学习Php注入的原理和技巧,当然也可以制定出相应的注意事项:
首先是服务器的安全设置,这里有php
mysql的安全设置和linux主机的安全设置。为了防止php
mysql注入,首先将magic_quotes_gpc设置为on,display_errors设置为Off。如果是id类型,我们用intval()将其转换成整数类型,比如代码:
$ id = intval($ id);
MySQL _ query = ” select * from example where article id = ‘ $ id ‘ “;或者这样写:MySQL _ query(” select * from article where article leid = “。intval ($ id)。”” )
如果是字符型,用addslashes()过滤,再过滤“%”和“_”,比如:
$ search = add slashes($ search);
$search=str_replace(“_ “,” & # 92;_ “,$ search);
$search=str_replace(“% “,” & # 92;% “,$ search);
当然,你也可以添加php通用反注入代码:
/*************************
通用PHP反注入安全代码
描述:
确定传递的变量是否包含非法字符。
比如$_POST,$_GET
功能:
反注射
**************************/
//要过滤的非法字符
$ ArrFiltrate = array(“”,“;”,“工会”);
//出错后要跳转的url。如果留空,则默认为上一页。
$ StrGoUrl = ” & quot;
//数组中是否有值
函数FunStringExist($ str filter,$ ArrFiltrate
foreach($ arr filter as $ key = & gt;$value){
if (eregi($value,$StrFiltrate)){
返回true
}
}
返回false
}
//合并$_POST和$_GET
if(function _ exists(array _ merge)){
$ ArrPostAndGet = array _ merge($ HTTP _ POST _ VARS,$ HTTP _ GET _ VARS);
}否则{
foreach($ HTTP _ POST _ VARS as $ key = & gt;$value){
$ ArrPostAndGet[]= $ value;
}
foreach($ HTTP _ GET _ VARS as $ key = & gt;$value){
$ ArrPostAndGet[]= $ value;
}
}
//身份验证开始。
foreach($ ArrPostAndGet as $ key = & gt;$value){
if (FunStringExist($value,$ ArrFiltrate
Echo “alert (/”Neeao提示,非法字符/”);
if (empty($StrGoUrl)){
echo ” history . go(-1);”;
}否则{
echo“window . location =/”quot;.$StrGoUrl。”/”;”;
}
退出;
}
}
马鞭& gt
/*************************
另存为checkpostandget.php
然后在每个php文件前添加include(” checkpostandget . PHP “);你可以。
**************************/
另外,管理员用户名和密码采用md5加密,可以有效防止php的注入。
还有一些服务器和mysql的安全防范措施。
linux服务器的安全设置:
加密密码,使用“/usr/sbin/authconfig”工具打开密码的影子功能,加密密码。
禁止访问重要文件,进入linux命令界面,输入:
#chmod 600 /etc/inetd.conf //将文件属性更改为600
#chattr
I /etc/inetd.conf //确保文件的所有者是root
# # chattr-I/etc/inetd . conf////限制对此文件的更改
禁止任何用户通过su命令更改为root用户。
在su配置文件的开头添加以下两行,即/etc/pam.d/ directory:
auth sufficient/lib/security/PAM _ rootok . so debug
需要授权/lib/security/PAM _ whell . so group = wheel
删除所有特殊账户。
#userdel lp等。删除用户
#groupdel lp等。删除该组
禁止的suid/sgid程序
# find/-键入f & # 92(-perm-04000-o–perm-02000 & # 92;) \-execls–LG { } & # 92;;
如何判断PHP源码是否存在SQL注入漏洞?
判断是否存在SQL注入首先找到可能的注入点;比如常见的get,post,甚至cookie,传递参数到PHP,然后参数被拼接到SQL中,如果后端接收参数后没有进行验证过滤,就很可能会出现注入。比如xxx.com?id=321,id就很可能是注入点。
说白了就是不要相信用户输入,对用户可控的参数进行严格校验。注意是严格校验!简单的去空格,或者是特殊字符替换很容易绕过。
如果已经有原码,可以进行代码审计,进行逐一排查。也可以搭建本地环境使用类似于sqlmap这样的自动化工具进行可以链接的检测。
个人理解仅供参考,如有偏颇望批评指正!