下面我们根据我编程序的经验来写一篇关于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