php网站如何防止sql注入?

网站的运行安全肯定是每个站长必须考虑的问题,大家知道,大多数黑客攻击网站都是采用sql注入,这就是我们常说的为什么   ?

最原始的静态的网站反而是最安全的。今天我们讲讲PHP注入的安全规范,防止自己的网站被sql注入。

如今主流的网站开发语言还是php,那我们就从php网站如何防止sql注入开始说起:

Php注入的安全防范通过上面的过程,我们可以了解到php注入的原理和手法,当然我们也同样可以制定出相应该的防范方法:

首先是对服务器的安全设置,这里主要是php+mysql的安全设置和linux主机的安全设置。对php+mysql注射的防范,首先将magic_quotes_gpc设置为On,display_errs设置为Off,如果id型,我们利用intval()将其转换成整数类型,如代码:

$idintval($id);

mysql_query”*fromexamplewherearticieid’$id’”;或者这样写:mysql_query(”SELECT*FROMarticleWHEREarticleid”.intval($id).”")

如果是字符型就用addslashes()过滤一下,然后再过滤”%”和”_”如:

$searchaddslashes($search);

$searchstr_replace(“_”,”\_”,$search);

$searchstr_replace(“%”,”\%”,$search);

当然也可以加php通用防注入代码:

/*************************

PHP通用防注入安全代码

说明:

判断传递的变量中是否含有非法字符

如$_POST、$_GET

功能:

防注入

**************************/

//要过滤的非法字符

$ArrFiltratearray(”‘”,”;”,”union”);

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

$StrGoUrl”";

//是否存在数组中的值

functionFunStringExist($StrFiltrate,$ArrFiltrate){

feach($ArrFiltrateas$key>$value){

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

returntrue;

}

}

returnfalse;

}

//合并$_POST和$_GET

if(function_exists(array_merge)){

$ArrPostAndGetarray_merge($HTTP_POST_VARS,$HTTP_GET_VARS);

}else{

feach($HTTP_POST_VARSas$key>$value){

$ArrPostAndGet[]$value;

}

feach($HTTP_GET_VARSas$key>$value){

$ArrPostAndGet[]$value;

}

}

//验证开始

feach($ArrPostAndGetas$key>$value){

if(FunStringExist($value,$ArrFiltrate)){

echo“alert(/”Neeao提示,非法字符/”);”;

if(empty($StrGoUrl)){

echo“histy.go(-1);”;

}else{

echo“window.location/”".$StrGoUrl.”/”;”;

}

exit;

}

}

?>

/*************************

保存为checkpostget.php

然后在每个php文件前加include(“checkpostget.php“);即可

**************************/

另外将管理员用户名和密码都采取md5加密,这样就能有效地防止了php的注入。

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

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

加密口令,使用“/usr/sbin/authconfig”工具打开密码的shadow功能,对passwd进行加密。

禁止访问重要文件,进入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.sodebug

Auth required /lib/security/pam_whell.sogroupwheel

删除所有的特殊帐户

#userdel lp等等删除用户

#groupdellp等等删除组

禁止不使用的suid/sgid程序

#find/-typef\(-perm-04000  -o–perm-02000\)\-execls–lg{}\;

判断传递的变量中是否含有非法字符我们把以下代码放到一个公共的文件里,比如security.inc.php里面,每个文件里都include一下这个文件,那么就能够给任何一个程序进行提交的所有变量进行过滤了,就达到了我们一劳永逸的效果。

简述:/*************************

说明:

判断传递的变量中是否含有非法字符

如$_POST、$_GET

功能:防注入

**************************/

//要过滤的非法字符

$ArrFiltratearray("",";","union");

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

$StrGoUrl"";

//是否存在数组中的值

functionFunStringExist($StrFiltrate,$ArrFiltrate){

feach($ArrFiltrateas$key>$value){

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

returntrue;

}

}

returnfalse;

}

//合并$_POST和$_GET

if(function_exists(array_merge)){

$ArrPostAndGetarray_merge($HTTP_POST_VARS,$HTTP_GET_VARS);

}else{

feach($HTTP_POST_VARSas$key>$value){

$ArrPostAndGet[]$value;

}

feach($HTTP_GET_VARSas$key>$value){

$ArrPostAndGet[]$value;

}

}

//验证开始

feach($ArrPostAndGetas$key>$value){

if(FunStringExist($value,$ArrFiltrate)){

echo"alert(\"非法字符\");";

if(emptyempty($StrGoUrl)){

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

}else{

echo"window.location\"".$StrGoUrl."\";";

}

exit;

}

}

?>

保存为checkpostget.php

然后在每个php文件前加include(“checkpostget.php“);即可

方法2

代码如下:

/*过滤所有GET过来变量*/

feach($_GETas$get_key>$get_var)

{

if(is_numeric($get_var)){

$get[strtolower($get_key)]get_int($get_var);

}else{

$get[strtolower($get_key)]get_str($get_var);

}

}

/*过滤所有POST过来的变量*/

feach($_POSTas$post_key>$post_var)

{

if(is_numeric($post_var)){

$post[strtolower($post_key)]get_int($post_var);

}else{

$post[strtolower($post_key)]get_str($post_var);

}

}

/*过滤函数*/

//整型过滤函数

functionget_int($number)

{

returnintval($number);

}

//字符串型过滤函数

functionget_str($string)

{

if(!get_magic_quotes_gpc()){

returnaddslashes($string);

}

return$string;

}

第一个是对数据进行转义的方法

第二个方法写在单独的文件里,引入每一个PHP文件内

就可以实现对每一个数据进行转义处理了

functionsaddslashes($string){

if(is_array($string)){

feach($stringas$key>$val){

$string[$key]saddslashes($val);

}

}else{

$stringaddslashes($string);

}

return$string;

}

#################################################################

$magic_quoteget_magic_quotes_gpc();

if(empty($magic_quote)){

$_GETsaddslashes($_GET);

$_POSTsaddslashes($_POST);

}

免费领取兄弟连php原创视频教程光盘,详情咨询官网客服:

http://www.lampbrother.net

时间: 2024-07-31 14:30:42

php网站如何防止sql注入?的相关文章

谈谈PHP网站的防SQL注入

SQL(Structured Query Language)即结构化查询语言.SQL 注入,就是把 SQL 命令插入到 Web 表单的输入域或页面请求参数的查询字符串中,在 Web表单向 Web 服务器提交 GET 或 POST 请求时,如果服务器端未严格验证参数的有效性和合法性,将导致数据库服务器执行恶意的 SQL 命令. SQL 注入攻击的过程: (1)判断 Web 应用是否可以进行 SQL 注入. (2)寻找 SQL 注入点. (3)猜解用户名和密码. (4)寻找 Web 系统管理后台入口

网站如何防止sql注入攻击的解决办法

首先我们来了解下什么是SQL注入,SQL注入简单来讲就是将一些非法参数插入到网站数据库中去,执行一些sql命令,比如查询数据库的账号密码,数据库的版本,数据库服务器的IP等等的一些操作,sql注入是目前网站漏洞中危害最大的一个漏洞,受攻击的网站占大多数都是sql注入攻击. sql注入攻击用英语来讲Structured Query Language,在网站的编程语言当中是一种比较另类的网站开发语言,我们网站安全行业通常来讲sql是用来数据库查询的一种网站开发语言,同时也是一种脚本文件的一个文件名,

网站如何防止sql注入×××的解决办法

首先我们来了解下什么是SQL注入,SQL注入简单来讲就是将一些非法参数插入到网站数据库中去,执行一些sql命令,比如查询数据库的账号密码,数据库的版本,数据库服务器的IP等等的一些操作,sql注入是目前网站漏洞中危害最大的一个漏洞,受×××的网站占大多数都是sql注入×××. sql注入×××用英语来讲Structured Query Language,在网站的编程语言当中是一种比较另类的网站开发语言,我们网站安全行业通常来讲sql是用来数据库查询的一种网站开发语言,同时也是一种脚本文件的一个文

网站mysql防止sql注入*** 3种方法总结

mysql数据库一直以来都遭受到sql注入***的影响,很多网站,包括目前的PC端以及手机端都在使用php+mysql数据库这种架构,大多数网站受到的***都是与sql注入***有关,那么mysql数据库如何防止sql注入呢?下面我们SINE安全技术针对于这个sql注入问题总结3种方案去防止sql注入***. sql注入产生的原因很简单,就是访问用户通过网站前端对网站可以输入参数的地方进行提交参数,参数里插入了一些恶意参数传入到服务器后端里去,服务器后端并没有对其进行详细的安全过滤,导致直接进入

网站入侵工具 SQL注入神器

0x 00 前言 SQLMAP 0x 01 注入原理              不说了 *****************************************结束分割线***************************************** 0x 02 安装SQLMap 1. 安装python 官网https://www.python.org/ 选择最新版本下载安装即可 因为SQLMap使用Python写的 ,所以没有Python的环境SQLMap无法运行 1.linux下

如何防止网站被SQL注入攻击之java网站安全部署

SQL注入攻击(SQL injection)是目前网站安全以及服务器安全层面上是最具有攻击性,危害性较高,被黑客利用最多的一个漏洞,基本上针对于网站代码,包括JAVA JSP PHP ASP apache tomcat 语言开发的代码都会存在sql注入漏洞.   随着JAVA JSP架构的市场份额越来越多,许多平台都使用JAVA开发,本文通过对sql注入的详细分析,从代码层面以及服务器层面,根本上来防止sql注入攻击.   SQL注入漏洞的原理很简单,通俗来讲:就是程序员在编写网站代码的时候,一

sql注入代码解释

某个网站的登录验证的SQL查询代码为: 1 strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"  恶意填入 2 userName = "1' OR '1'='1"; 与 3 passWord = "1' OR '1'='1"; 时,将导致原本的SQL字符串被填为 4 str

报错型sql注入原理分析

0x00:前言 关于sql注入,经久不衰,现在的网站一般对sql注入的防护也相对加强了,2016年的渗透测试报告中,出现最多的是xss(跨站脚本攻击)和明文传输等,但是对sql注入的利用方式,也相对成熟,详细了解sql注入,可以参考之前的文章.http://wt7315.blog.51cto.com/10319657/1828167 今天主要分享下sql注入中的报错型,在大多网上的文章会列出类似于公式的句子,却没解释为什么要使用这样的函数,为什么使用这个函数会出现报错而导致sql注入. 0x01

Web安全之SQL注入攻击技巧与防范

在Web1.0时代,人们更多是关注服务器端动态脚本语言的安全问题,比如将一个可执行脚本(俗称Webshell)通过脚本语言的漏洞上传到服务器上,从而获得服务器权限.在Web发展初期,随着动态脚本语言的发展和普及,以及早期工程师对安全问题认知不足导致很多”安全血案”的发生,至今仍然遗留下许多历史问题,比如PHP语言至今仍然无法从语言本身杜绝「文件包含漏洞」(参见这里),只能依靠工程师良好的代码规范和安全意识. 伴随着Web2.0.社交网络.微博等一系列新型互联网产品的兴起,基于Web环境的互联网应