//永远不要相信用户的输入,为了防止黑客在我们的表单,GET,header头中输入一些恶意的SQL,为此,我们需要在后台进行执行SQL代码的时候进行对SQL注入的预防//那么首先来说一下什么是SQL注入
//案例一
http://localhost/cacos/index.php?id=1
select * from goods where id=1
//我们通过GET来进行传递参数,查询数据库中goods表中id=1的数据,这样的查询是非常正常的,来看看我们后台的代码
$id=$_GET['id'] ? $_GET['id'] : "";
if(empty($id)){echo "goods‘’s id is not null";
}
//可以看出来,我们在后台是没有对传递过来的参数进行过滤的,所以,黑客往往可以对SQL进行SQL注入,达到恶意攻击的效果
select * from goods where id=-1 OR 1=1
//这个SQL前面部分id=-1是永远不可能存在的,因为ID为一个整形,所以前面的部分返回false,然而后面的1=1这块SQL返回值为true,所以这条SQL的返回永远为true,这样的话,这条SQL将会变为
select * from goods;  //就会查出全表的数据,这样并不是我们想要的结果,那么我们怎么防止用户这样输入呢
//在后台执行SQL前,对传递过来的参数进行校验
is_numeric():判断是否为一个数字
$id=$_GET['id'] ? $_GET['id'] : "";
if(empty($id) || !is_numeric($id) || preg_match("/^[1-9][0-9]*$/",$id)){echo "id为空或者不是一个数字或不为正数";
}
//这样校验就会达到防止用户恶意输入的效果//上面是最基本的SQL注入,SQL注入还可以通过mysql的注释符: #,-- ,来通过截止注释符号后面的SQL语句,一般用来攻击公司后台,用户账号等。
//我们来模拟一个表单
$username=$_GET['username'];
$password=md5($_GET['password']);
if(empty($username) || empty($password)){echo "username or password is not null";
}
$sql="select * from user where username={$username} and password={$password}";
//这样的SQL实际上是没有什么问题的,但是在经过处理之后,就会变成
$sql="select * from user where username={$username}# and password={$password}";
//在加了一个#注释符后,SQL语句就不会执行后面对密码的查询,或者是,
$sql="select * from user where username={$username}--  and password={$password}";
//处理的方法为:
//1.使用mysqli_real_escape_string  和 addslashes函数,函数结果相同
$username=addslashes($username);
$username=mysqli_real_escape_string("数据库",$username);
//对where条件比较靠前的,采用SQL语句转义,输出的结果为
select * from user where username=$username and password='123213213';
//这样运行SQL注入后,SQL就会变为
$sql_carry=select * from user where username='Abel_jiawei'# and password='123213123';
//通过转移符,控制SQL语句
$new_sql=select * from user where username='Abel_jiawei'\'#' and password='123213312';
//2.运用PHP正则表达式匹配
preg_match("/^[a-zA-Z0-9]{6,}$/",$username)  //PHP正则表达式验证
//3.如果用户输入中含有','',",这样的值,使用str_replace函数过滤
str_replace(要过滤的值,改变成什么,对谁)
$username=str_replace(''','',$username);
//这样的话再执行SQL,当用户输入->Abel_jiawei',这样的值也就不会出错了;//原创文章,请勿转载!!!谢谢!!!

php防止SQL注入相关推荐

  1. php mysql 防 sql注入_php 防sql注入方法

    php防sql注入的方法:1.使用mysql_real_escape_string方法转义SQL语句中使用的字符串中的特殊字符:2.打开magic_quotes_gpc来防止SQL注入:3.通过自定义 ...

  2. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  3. mybaits的模糊查询_mybatis模糊查询防止SQL注入(很详细)

    SQL注入,大家都不陌生,是一种常见的攻击方式.攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如"or '1'='1'"这样的语句),有可能入侵参数检验不足的应用程序 ...

  4. SQL注入漏洞全接触--入门篇

    随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...

  5. Sql注入和Html注入

    举例说,有一间公司的网页服务器上有一个留言板的代码,用来让用户发表简短的口信,例如: hello word!!!! 不过,这个代码原来有漏洞.一个意图入侵者得悉这间公司采用了有问题的代码,于是试图通过 ...

  6. mysql注入实例获取答案_本文实例讲述了MySQL解决SQL注入的另类方法。分享给大家供大家参考,具体如下:问题解读我觉得,这个问题每年带来的成本可以高达数十亿美元了。本文就来谈谈,...

    本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: se ...

  7. 【数据库】 兴唐第二十七节课只sql注入

    首先来一个用户登录程序 public static void login(String username, String password) {Connection conn = null;State ...

  8. 雷林鹏分享:MySQL 及 SQL 注入

    MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...

  9. WEB攻击手段及防御第2篇-SQL注入

    概念 SQL注入即通过WEB表单域插入非法SQL命令,当服务器端构造SQL时采用拼接形式,非法SQL与正常SQL一并构造并在数据库中执行. 简单的SQL注入的例子: 例1:test123456 or ...

  10. WEB安全,SQL注入漏洞的加固代码汇总

    该修复任务专用于处理以下安全性问题: [1] SQL 盲注 [2] SQL 注入 [3] XPath 注入 [4] 发现数据库错误模式 [5] 跨站点脚本编制 [6] 使用 SQL 注入的认证旁路 [ ...

最新文章

  1. 【AngularJS】—— 9 自定义过滤器
  2. Python程序设计题解【蓝桥杯官网题库】 DAY15-算法训练
  3. 病症:arm启动后应用程序界面显示…
  4. [IDEA中SSM整合,前端页面jsp] tomcat一开始访问jsp页面就报404错误
  5. Angular 4.x 自定义验证指令
  6. spark视频-Spark on Yarn
  7. hook NSArray 方法在debug模式下会崩溃, 在release模式下会返回nil
  8. git reset --mixed, - soft和--hard有什么区别?
  9. Normalize.css – 现代 Web 开发必备的 CSS resets
  10. mfc word转pdf
  11. 看着现在的勒布朗·詹姆斯,让人再次回想起篮球之神——伟大的迈克尔·乔丹和他的最佳搭档——斯科蒂·皮蓬
  12. CTE6备考与考试感悟
  13. System/360 大型机差点毁了 IBM !
  14. ToolsOh第6批收录
  15. java秒表计时器_Java实现的计时器【秒表】功能示例
  16. python解析网页数据_python爬虫——爬取网页数据和解析数据
  17. 双语电子商城系统(含小程序) v5.0
  18. 通过docker搭建lamp+wordpress+ELK监控
  19. linux修改SSH密码的方法
  20. Overflow Freed Chunk

热门文章

  1. Linux signal 那些事儿 (3)
  2. SparkSQL简单教程
  3. 大数乘法与大数加法 java实现
  4. 【数据结构】图文讲解神奇的单链表与双链表
  5. asp:dropdownlist如何去掉三角箭头_如何使用css伪元素实现超实用的图标库(附源码)...
  6. OpenCV读取网络摄像头视频并保存到本地
  7. 华为鸿蒙系统和奔驰公司,华为已行动,又是一个千亿BG,奔驰已经加入
  8. python多久能上手_Python容易上手的爬虫项目,特别适合基础入门
  9. html限制显示字数其余用...代替,html实现钝角效果;html实现限制一行字数的显示,超出的部分用省略号(....)来代替...
  10. c语言统计计算机专业人数,非计算机专业C语言练习题及2013版中国统计年鉴1.doc...