自己了解php中sql注入一些方法介绍

自己了解php中sql注入一些方法介绍,下面介绍的全部是最常见的sql注入方法了,有需要的朋友可参考一下。

何为注入?

比如我们在查询数据库的时候,我们通过文章的id号来取出这篇文章的所有信息。那么sql语句可以这样写:

代码如下

select * from blog where id=5

id的值通过用户的操作来传递,一般是get方式,形如read.php?id=5。这样看起来是没有任何问题,但是如果我们稍微改下sql语句:

代码如下

select * from blog where id=5 or 1=1

1=1这个是恒等的,那么这条语句就会取出所有的文章。要修改这个只需要改一下get的传值即可:read.php?;注意这两个单引号…所以最简单的就是我们可以通过直接把参数改为单引号来查看这个链接是否存在注入。当然,非法用户看到所有的文章并不要紧,但是如果这个表是保存账号和密码的呢?

2.如何防范注入?

说到底,防范注入的根本就在于字符的过滤,因为非法用户一般都是通过构造url来传值的,如果我们过滤了他传进来的非法参数,这非法的sql语句就不会执行,那么我们也就防止网站被注入!

php内置的过滤字符串还是相当不错的,先看看具体代码:

代码如下

function safe($s)

{

if(!get_magic_quotes_gpc())

{

if(is_array($s))

foreach($s as $key=>$value)

$s[$key] = addslashes($value);

else

$s=addslashes($s);

}

return $s;

}

function html_safe($s)

{

return nl2br(htmlspecialchars(safe($s) )) ;

}

如果你不知道上面用到的几个内置函数,也懒了去查手册的话,那我就说下这几个函数:

magic_quotes_gpc这个称为魔术引号,如果这个功能开启,那么当向数据库中插入数据时,魔术引号所做的就是自动对所有的 get、post、cookie 数据运用 addslashes() 函数。get_magic_quotes_gpc()就是用来获取服务器上这个功能是否开启的:如果开启了,那么直接返回数据;如果没开启,那么手动对参数进行addslashes()转义。这样就可以防止双层转义~

addslashes — 使用反斜线引用字符串。描述:string addslashes ( string str );返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(’)、双引号(”)、反斜线()与 nul(null 字符)。 一个使用 addslashes() 的例子是当你要往数据库中输入数据时。例如,将名字 o’reilly 插入到数据库中,这就需要对其进行转义。大多数据库使用 作为转义符:o’reilly。这样可以将数据放入数据库中,而不会插入额外的 。当 php 指令 magic_quotes_sybase 被设置成 on 时,意味着插入 ‘ 时将使用 ‘ 进行转义。

下面的那个htmlspecialchars就是对html中的字符进行转换,比如说将‘&’转成‘&amp’,,将‘ $val) {

$string[$key] = add_slashes($val);

}

return $string;

}

当然,这应该只是一部分,其他的应该也大同小异。

http://www.bkjia.com/phpjc/629655.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/629655.htmltecharticle自己了解php中sql注入一些方法介绍,下面介绍的全部是最常见的sql注入方法了,有需要的朋友可参考一下。 何为注入? 比如我们在查询数据…

Posted in 未分类