【www.gdgbn.com--mysql教程】

下面我们根据我编程序的经验来写一篇关于mysql教程 sql防注入简介与防注入实例吧。

sql防注入简介:

sql查询是一种用来数据与用户进行交互的文本语言,sql利用外部接将用户提交的数据发送给mysql数据库教程服务器进行处理,如果没有严密的过滤,可能导致数据丢失,如被删除,修改,而这样问题是网络管理员很难做事的,他们不能通过打系统被丁,或安装防火强可以控制了,。

下面我们来看一个简单的用户登陆实例。

一,创建用户表user

create table user (

userid(int) not null auto_increment,

username not null default"",

userpass not null default "",

primary key(userid)

)type= myisam auto_increment=1;

好表就创建成功了。我们先给用户表user插入一条记录

insert into "user" values(1,"www.111cn.net","123456");

现在来做用户登陆代码

php教程

$root ="localhost";

$dbName="root";

$dbpwd ="123456";

$db = "userdb";

mysql_connect($root,$dbName,$dbpwd) or die("数据库连接失败");

$sql ="select * from user where username="$username"  and password="$pwd";

$result =mysql_db_query($db,$sql);

$ufo = mysql_fetch_array( $result );

if( $ufo )

{

echo "登陆成功";

}

else

{

echo "登陆失败";

}

好现在我们来做一个实例提供一个url给上面的php处理页面

http://www.111cn.net/test/a.php?user=www.111cn.net" or "  1= 1;

结果发现这条sql可以成功登陆我们的系统,而不是我想要的密码等12346,好下面我们再来看个实例

http://www.111cn.net/test/a.php?user=www.111cn.net" /*;

http://www.111cn.net/test/a.php?user=www.111cn.net" or " #;

这样只要用户名正确同样可以登陆系统,在sql语句中/*与#是注掉后面的sql,

好了,根据上面的问题我们写了一个自定义函数来过滤大部sql注入的防注入函数

function safesql()

{

$re = "/(|"%27|;|(%3d)|(|(%28)|)|(%29)|(/*)|(%2f%2a)|(%2a%2f)|+|(%2b)|(<|(%3e)|(%3e)|(--))|[|%5d)/";

if( preg_match( $re ,$username)

{

echo"请不要非法sql注入";

exit;

}

else

{

return turn;

}

最后总结一下:

注明:本站原创文章转载注明来源www.111cn.net

本文来源:http://www.gdgbn.com/shujuku/24736/