sql注入的原理是什么,怎么预防sql注入
为什么会产生sql注入:
主要原因,对用户输入的绝对信任,相信所有用户的输入都是可信的,没有对用户输入的语句进行过滤或者筛选,直接放到sql语句中进行拼接,从而导致了sql注入的产生
例如:
<php?
id = $_GET['id'];
sql = "select * from tables where id=$id limit 0,1";
.......
?>
如果是正常的id等于数值之类,是没有问题的,但是id如果被恶意用户更改,我们原本的逻辑就会出现一系列的问题
假如恶意用户输入的是 -1 union select version(),database()--+;
直接将用户输入的id拼接上就会产生以下语句
sql = "select * from tables where id=-1 union select version(),database()-- limit 0,1"(--表示的是数据库注释,+表示字符串的拼接)
由于他将id设置为了-1,数据库中不存在负值的id,所以第一个查询会查询到一个空的表,这样数据库会将union联合查询查询到的sql结果,返回出来
这样,恶意用户就会拿到我们数据库的版本和数据库的名字,要知道,在mysql5.0以上会存在一个information_schrma的数据库,这个数据库存放着所有的数据库名,表名,字段名,我们所有数据就会被泄露,严重的,还能对我们的数据进行修改和删除(堆叠查询,将原来的sql闭合,这样就可以直接对数据库进行危险操作 比如 insert drop 有的数据库或者中间件是不支持堆叠查询,具体堆叠查询(注入)就不再细说了)
sql注入的预防:
sql注入的本质上还是对用户输入数据的绝对信任,当我们对用户输入的数据绝对不信任的时候,就可以预防sql注入
1.输入数据长度的限制
2.关键字过滤:
对每个参数的传递进行检测,对其进行sql关键字过滤如(select insert where) 建议采用正则检测和递归过滤
3.对参数携带的特殊字符进行转义和过滤:
因为好多注入点都是在字符位置发生的,如果需要进行sql注入,就要先进性闭合的符号判断(id='$id' 如果不进行引号的闭合,数据库就会认为用户输入的所有参数为同一个字符串,这样sql注入的参数就会被认为是无效的)这也是我们的防护手段之一 建议采用正则检测和递归过滤
4.预编译防注入:预编译防注入是目前最好的,最有效的防注入手段
在数据库进行预编译的之后,sql语句已经会被数据库编译和优化了,并且运行数据库以参数化的形式进行查询,即使传递来的敏感字符也不会被执行,而是被当作参数处理
5.不要直接显示出错误的原因,最好指定一个错误的页面,尤其是sql注入(即使存在注入,也要让他去盲注)
关键字过滤&参数过滤:

pdo预编译代码:

sql注入的原理是什么,怎么预防sql注入的更多相关文章
- SQL注入的原理与预防
1. 什么是SQL注入? SQL注入是常见的网络攻击方式之一,通过SQL语句实现无账号登录,非法获取甚至篡改数据库中的数据. 2. SQL注入的思路 (1)找到SQL注入位置: (2)判断服务器类型和 ...
- Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解
前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程 ...
- DEDECMS数据库执行原理、CMS代码层SQL注入防御思路
我们在上一篇文章中学习了DEDECMS的模板标签.模板解析原理,以及通过对模板核心类的Hook Patch来对模板的解析流量的攻击模式检测,达到修复模板类代码执行漏洞的目的 http://www.cn ...
- 怎么预防sql注入攻击
假设sql是搜索用户A的文章,sql会是这样: select * from table where owner='A'; sql注入攻击者会修改用户名来实现攻击,例如把A 改成A' or 1='1 组 ...
- 【渗透课程】第五篇-SQL注入的原理
哈哈哈,讲到注入了.我想给大家讲注入的原理.这个我们前面的前言篇就说过,所谓的SQL注入就是,绕过数据库验证机制直接执行SQL语句.怎么说呢,我们先讲一个概念吧! 网站和网页的区别 单纯的网页是静态的 ...
- Sql注入基础原理介绍
说明:文章所有内容均截选自实验楼教程[Sql注入基础原理介绍]~ 实验原理 Sql 注入攻击是通过将恶意的 Sql 查询或添加语句插入到应用的输入参数中,再在后台 Sql 服务器上解析执行进行的攻击, ...
- sql注入学习笔记,什么是sql注入,如何预防sql注入,如何寻找sql注入漏洞,如何注入sql攻击 (原)
(整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文章最后关于如何预防sql注入) (整篇文章废话很多,但其实是为了新手能更好的了解这个sql注入是什么,需要学习的是文 ...
- 利用PreparedStatement预防SQL注入
1.什么是sql注入 SQL 注入是用户利用某些系统没有对输入数据进行充分的检查,从而进行恶意破坏的行为. 例如登录用户名采用 ' or 1=1 or username=‘,后台数据查询语句就变成 ...
- 预防SQL注入攻击
/** * 预防SQL注入攻击 * @param string $value * @return string */ function check_input($value) { // 去除斜杠 if ...
随机推荐
- mongodb4.xxx 安装,和基本配置
.社区版 下载地址 ww.mongodb.com/download-center/community .配置环境变量 安装目录下的 bin 目录 ,C:\z_MongoDB\bin:配置到系统环境变量 ...
- Markdown 的效果
这是一级标题 这是二级标题 这是三级标题 这是四级标题 这是五级标题 这是六级标题 这是加粗的文字 这是倾斜的文字 这是斜体加粗的文字 这是加删除线的文字 这是引用的内容 这是引用的内容 这是引用的内 ...
- wordpress<=4.6版本任意命令执行漏洞
漏洞简述 当WordPress 使用 PHPMailer 组件向用户发送邮件.攻击者在找回密码时会使用PHPmailer发送重置密码的邮件,利用substr(字符串截取函数).$run(系统调用函数) ...
- Java细节1--输入关闭
import java.util.Scanner; public class Demo01 { public static void main(String[] args) { Scanner sc= ...
- JS宣传页项目-综合实战
按照国际惯例先放图 index.html <!DOCTYPE html> <html lang="en"> <head> <meta ch ...
- echarts地图
<html> <body> <div id="cbar" style="width: 100%; height: 360px"&g ...
- 使用touch操作图片
功能: 1.图片放大缩小 2.图片移动 3.图片上做点标记 PS 1.后端程序员不容易,且行且珍惜 2.代码不想封装,累 js代码 /**************************calc pi ...
- ROS学习--RViz使用的要点
1.RViz文件保存,下次面板打开时,默认展示上一次的配置 2.设置Fixed_Frame很重要,一打开默认配置,就要确认这个参数是否正确配置,不然会出现:激光数据不展示.点pose_initial时 ...
- Git本地仓库的使用
Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 与 SVN 区别点: 1.Git 是分布式的,SVN 不是:这是 Git 和其它非分布式的版本控制系统,例如 S ...
- ansi sql 语法 切换为 oracle 语法
语句粘贴到 工作表 打开查询构建器 勾选 创建oracle连接 over sql dev 的语法设置调整,否则表别名会右对齐 下面是 转换后的结果,是不是看得舒服多了