sql注入以及防范

登陆验证注入:

//万能用户名失效

//万能密码 xx‘ or 1=‘1

//万能用户名 xxx‘ union select * from users/*

$sql="select * from users where username=‘$username‘ and password=‘$password‘";

//万能密码 33 union select * from users

//万能用户名 89 union select * from users;/*

$sql="select * from users where username=$username and password=$password";//$username不加‘’,只能表示数字,否则sql语句有错,这种写法不可以使用

/*

* 防范:

* 1:服务器配置  设置php.ini的magic_quotes_gpc为on

* 2:密码比对

* 3:pdo  php.ini   php_pdo_XXSQL.dll

* 4:入侵检测系统IDS

* */

密码比对防止注入

$sql="select password from users where username=‘$username‘";

$res=mysql_query($sql,$conn);

if($row=mysql_fetch_array($res)){

if($row[0]==$password){

header("Location:ManageUser.php");

}else{

echo "密码有误";//改成用户名或密码有误

}

}else{

echo "error,<a href=‘Login.php‘>返回</a>";

}

pdo防范

$sql="select * from users where username=? and password=?";

//创建pdo对象

$myPdo= new PDO("mysql:host=localhost;port=3306;dbname=spdb","root","root");

//设置编码

$myPdo->exec("set names utf8");

//预处理

$pdoStatement=$myPdo->prepare($sql);

//填入用户名和密码

$pdoStatement->execute(array($username,$password));

//取出结果

$res=$pdoStatement->fetch();

if(empty($res)){

echo "error,<a href=‘Login.php‘>返回</a>";

}else{

header("Location:ManageUser.php");

}

防止查询(搜索)注入:

//对关键字进行过滤

$keyWord=addslashes($keyWord);

$keyWord=str_replace("%","\%",$keyWord);

$keyWord=Str_replace("_","\_",$keyWord);

$sql="select * from users where username like ‘%$keyWord%‘";

if(!empty($keyWord)){

$res=mysql_query($sql,$conn) or die("不能完成查询".mysql_error());

$flag=0;

while($row=mysql_fetch_array($res)){

$flag=1;

echo "<br/>$row[0]&nbsp;&nbsp;&nbsp;$row[1]";

}

if($flag==0){

echo "你的关键词有误";

}

}else{

echo "请输入";

}

插入insert注入

其中的grade代表用户的等级,1是普通用户,2是普通管理员,3是

超级管理员,我们在注册一个用户的时候,默认是普通用户:sql语句:

INSERT INTO `users` (username, password, email, job,sal,grade) VALUES ( ‘$username‘, ‘$password‘, ‘$email‘,’$job’,’$sal’ ‘1‘);

填入的值 34‘, ’3’)/*   对应的sql语句就是:

INSERT INTO `users` (username, password, email, job,sal,grade) VALUES ( ‘xiaoming’, ‘xiaoming’, ‘[email protected]’,’工程师’,’34’,’3’)/*, ‘1‘);

这样就注册成为超级管理员了。但这种利用方法也有一定的局限性,比如,我没有需要改写的变量如grade字段是数据库的第一个字段,前面没有地方给我们注入,我们也没有办法了。

数据过滤:在接收字符串时把单引号之类的字符给过滤掉

时间: 2024-11-10 13:13:47

sql注入以及防范的相关文章

目前日向博客对xss跨站脚本注入和sql注入的防范

昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无线循环弹出框的脚本,估计这个脚本之后他再想输入也没法了. 类似这种: <html> <body onload='while(true){alert(1)}'> </body> </html> 我立刻认识到这事件严重性,它说明我的博客有严重安全问题.因为xss跨站脚本攻击可能导致用户Co

SQL注入与防范

SQL注入简介: 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句. SQL注入方法: 一.拼接字符串(通过输入框输入SQL语句使其改变原意) Select * from T_User where UserID

PHP 关于SQL注入的防范措施。

最近在使用框架的时候还是有点不安,不知道框架的设计者有没有考虑到SQL-Injection的问题,我在顶层需不需要做一些必要的过滤等等,由 此我特意的去StackOverflow看了下,真是获益良多,然后我去看了下框架的DB库的内部方法,然后就比较安心了.分享下国内外PHP程序员在处 理SQL-Injection的一些方案. 国外普遍都推荐,只要你是使用查询都应该做到两点:1.prepared statements(准备好的声明) 2.parameterized queries (参数化的查询请

API安全(二)-SQL注入与防范

1.什么是注入攻击 使用了用户输入的但是我们没有校验过的数据,来拼装一个可以行的指令,交给系统去执行,结果导致执行了我们不希望发生的命令.注入攻击用很多种,最常见的是SQL注入. 2.SQL注入攻击 Java程序员知道,使用Statement进行查询时会造成SQL注入攻击,从而使用PreparedStatement来进行SQL预编译,从而有效的防止SQL注入攻击.但是日常开发中,我们一般多使用框架来进行数据库操作,如JdbcTemplate.Spring-Data-Jpa.Mybatis等,但是

java sql 注入 与防范

1.注入 2 .预防 package com.jdbc; import java.sql.*; import java.util.Scanner; public class loginDemo { public static void main(String[] args)throws ClassNotFoundException, SQLException { //1.注册驱动 Class.forName("com.mysql.jdbc.Driver"); //2.连接 String

MySQL防范SQL注入风险

0.导读 在MySQL里,如何识别并且避免发生SQL注入风险 1.关于SQL注入 互联网很危险,信息及数据安全很重要,SQL注入是最常见的入侵手段之一,其技术门槛低.成本低.收益大,颇受各层次的黑客们所青睐. 一般来说,SQL注入的手法是利用各种机会将恶意SQL代码添加到程序参数中,并最终被服务器端执行,造成不良后果. 例如,我们访问接口 http://imysql.com/user.php?userid=123 来根据userid获取用户信息,假设程序中是这么处理的: $sql = “SELE

记录一下学习PDO技术防范SQL注入的方法

最近学习了使用PDO技术防范SQL注入的方法,在博客里当做一次笔记.若果有新的感悟在来添上一笔,毕竟也是刚开始学习.一. 什么是PDO PDO全名PHP Data Object PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. PDO 提供了一个数据访问抽象层,这意味着,不管使用哪种数据库,都可以用相同的函数(方法)来查询和获取数据. 二.如何去使用PDO防范SQL注入?/防范sql注入这里使用quate()方法过滤特殊字符和通过预处理的一些方式以及bindPar

SQL注入其实很简单,别一不留神就被利用了

SQL注入这个词相信大家应该都不陌生,而且每年都会有这样子的事情发生,下面我先带大家回忆11年两期起比较经典的案例事件: 1.SONY索尼事件2011年4月,著名的×××组织Anonymous***SONY一个网站,一星期后才被发现7千万的用户个人信息,其中包括姓名.地址.E-mail.出生日期.用户名.密码以及购买记录的数据信息,随后的一些其他服务器也被相继攻破 2.CSDN数据泄露门2011年底,国内各大网站被爆出"密码泄露门",最先公布的是著名技术网站CSDN600万账户和密码泄

Sql 注入详解:宽字节注入+二次注入

sql注入漏洞 原理:由于开发者在编写操作数据库代码时,直接将外部可控参数拼接到sql 语句中,没有经过任何过滤就直接放入到数据库引擎中执行了. 攻击方式: (1) 权限较大时,直接写入webshell 或者直接执行系统命令 (2) 权限较小时,通过注入获得管理员密码信息,或者修改数据库内容进行钓鱼等 常出现的地方: 登录页面.获取HTTP头(user-agent.client-ip等).订单处理等,HTTP头里面client-ip 和 x-forward-for 常出现漏洞,在涉及购物车的地方