php网站怎么注入(php 注入)-冯金伟博客园

如何将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这样的自动化工具进行可以链接的检测。

个人理解仅供参考,如有偏颇望批评指正!