无意苦争春  竹子熊  2017.7.28防御SQL注入

sql注入是网站开发常见的安全漏洞之一,其产生的原因是开发人员未对用户输入的数据进行过滤就拼接到sql语句中执行,导致用户输入的一些特殊字符破坏可原有SQL语句的逻辑,造成数据泄漏,被篡改,删除等危险的后果.

在此前的项目中,操作数据库使用MYSQLi扩展的预处理机制,将sql语句和数据分离,从本质上避免了SQL注入问题的发生.需要注意的是,如果开发人员仍然使用拼接SQL语句的方式,则SQL注入问题依然会发生,如下列代码所示.//下列代码存在SQL注入问题

$name$_POST['name'];

$result=mysqli_query($link,"SELECT * FROM `admin` WHERE `name`=`$name`");

上述代码将来自外部的数据name数据直接拼接到sql语句中,如果用户输入了单引号,则会将原有的SQL语句中的单引号闭合,然后用户就可以将自己输入的内容当成SQL语句执行,如下所示.//假设用户输入" 'or 1='1",SQL语句将变成

SELECT * `admin`WHERE `name` ='' or 1='1'

将用户输入的攻击代码拼接到sql语句后,原有的逻辑就被破坏了,此时就会通过or条件查询出admin表中的所有记录,造成了数据的泄漏.

接下来改进上述代码,通过MYSQLi预处理的机制将SQL与数据分开发送,代码如下.//接收变量

$name=$_POST['name'];

//预处理方式执行SQL

$stmt=mysqli_prepare($link,'SELECT * FROM  `admin` WHERE `name`=?');

mysqli_stmt_bind_param($stmt,'s',$name);

mysqli_stmt_execute($stmt);

$result=mysqli_stmt_get_result($stmt);

经过上述修改后,即可防御sql注入问题,

防御XSS攻击

跨站脚本攻击(Cross Site scripting XSS)产生的原因是将来自用户输入的数据未经过滤就拼接到HTML页面中,造成攻击者可以通过输入Javascript代码来盗取网站用户的Cookie.由于Cookie在网站中承载着用户登录信息的作用,一旦Cookie被盗取,攻击者就得到了受害用户登录后的权限,从而造成一系列危险的后果.

在防御XSS攻击时,对于普通的文本数据,使用htmlspecialchars()是最好的方法,该函数可以将转义字符串中的双引号,尖括号等特殊字符,但需要注意的是,默认情况下,单引号不会被转义,例如,以下代码就存在XSS漏洞.//接收来自用户输入的数据

$name=htmlspecialchars($_POST['name']);

//拼接到HTML中

echo "";

在上述代码中.由于用户可以输入单引号,因此可以通过单引号闭合原有的value属性,然后在后面可以添加事件属性如onclick,从而通过这种方式来注入Javascript代码,如下所示.//假设用户输入" ' οnclick='alert(document.cookie) ",输出结果为

当上述代码背浏览器执行后,攻击者注入的Javascript代码就会运行,这样威胁网站和用户的安全.

用于 XSS攻击的主要目的是盗取Cookie,因此可以为项目最关键的PHPSESSID这个Cookie设置HttpOnly属性.通过设置该属性可以阻止Javascript访问该Cookie.在php.ini中可以设置是否开启session时自动为PHPSESSID设置HttpOnly属性,也可以通过ini_set()函数临时修改配置,具体代码如下.//保存在浏览器端的PHPSESSID设置HttpOnly

ini_set('session.cookie_httponly',1);

//开启Session

session_start();

上述代码在开启Session前通过ini_set()函数动态修改PHP的环境配置,此修改只对本项目在运行周期内时有效,并不影响php.ini中的原有设置.

mysql 注入攻击与防御_防御SQL注入和XSS攻击相关推荐

  1. sql注入 练手网站_靶场sql注入练手----sqlmap篇(纯手打)

    绝大数情况下,管理员的账号密码都在admin表里 查询字段名 构造 ?id=1 and 1=2 union select 1,column_name from information_schema.c ...

  2. [Mysql] 防御和检查SQL注入攻击的手段

    SQL注入攻击的种类 知彼知己,方可取胜.首先要清楚SQL注入攻击有哪些种类. 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句.这 ...

  3. sql注释符注入防御_WAF的SQL注入绕过手段和防御技术

    一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数 ...

  4. mysql注入扫描网站漏洞工具_国产SQL注入漏洞测试工具 - 超级SQL注入工具(SSQLInjection)...

    此工具为本人对C#.Socket及HTTP协议.SQL注入进行深入研究后,闲暇时间做的一款SQL注入工具.不说秒SQLMap,直接秒杀什么webcruiser.Safe3SI.pangolin.hav ...

  5. mysql注入漏洞语句,web安全之sql注入漏洞

    概念 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通俗地讲,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力 ...

  6. 怎么进行mysql注入测试_MySQL for Java的SQL注入测试

    只要你学JDBC,基本上所有的人都会和你说,Statement不能防止SQL注入, PreparedStatement能够防止SQL注入. 基本上参加工作了一段时间之后还是这么认为的, 没错, 这句是 ...

  7. SQL注入是什么,怎么防止SQL注入?

    SQL注入是什么,怎么防止SQL注入? 一.什么是SQL注入? SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录 ...

  8. php如何防sql注入,如何在PHP中防止SQL注入

    本篇文章将给大家介绍关于PHP中的SQL注入以及使用PHP-MySQLi和PHP-PDO驱动程序防止SQL注入的方法.下面我们来看具体的内容. 简单的SQL注入示例 例如,A有一个银行网站.已为银行客 ...

  9. mysql in sql注入_在 SQL 注入攻击中检查数据库

    原文来自:PORTSWIGGER WEB SECURITY >> Web Security Academy >>Examining the database >>E ...

  10. mysql注入带外通道攻击_防止SQL注入攻击的方法

    防止SQL注入攻击的方法 发布时间:2020-08-25 14:18:13 来源:亿速云 阅读:78 作者:小新 小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文 ...

最新文章

  1. iphone无线充电充电测试软件,无线充电哪家强?5款Qi无线充电板横向测评
  2. 选择判断语句(switch)
  3. Shell学习笔记1-2
  4. 路由协议:RIP/OSPF/BGP—Vecloud微云
  5. Tomcat 安装与使用
  6. 棋牌游戏服务器架构: 总体设计
  7. T1串口波特率的计算方法
  8. T-SQL编程基础之一:变量与基本语句
  9. VC 创建NT服务程序
  10. creo数控编程怎么样_邹军:通过数控宏程序实现刀具寿命管理
  11. c语言2维动态数组,如何创建一个动态2维数组?
  12. 数据结构:栈的了解与示例(逆波兰表达式)
  13. Java常量什么时候被回收,JVM GC调优(2)-GC算法判定对象可以被回收(部分摘自深入理解Java虚拟机) - Java 技术驿站-Java 技术驿站...
  14. Java程序员必备的11大Intellij插件
  15. 基于UDP的简易网络聊天室
  16. 钉钉群机器人通知中的图片,突然不显示了
  17. mongodb基本命令及操作
  18. Android蓝牙打印机功能开发完整Demo
  19. 绕过content-type检测文件类型上传webshell
  20. PCL学习笔记(十八)-- ConditionalRemoval和RadiusOutliersRemoval滤波器移除离群点

热门文章

  1. 发现极为好用的数据库连接工具,基本上包含所有数据库DBeaver
  2. python写彩票程序30选7_写一个彩票程序:30选7
  3. 系统详细设计过程指南
  4. java 反编译 exe_Java反编译
  5. golang map转json的顺序问题
  6. ODBC数据源的作用及配置
  7. 接口压测之Locust
  8. C语言:基本语法汇总
  9. REACT打印页面组件
  10. Head First Java ——我的Java入门书