mysql 注入攻击与防御_防御SQL注入和XSS攻击
无意苦争春 竹子熊 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攻击相关推荐
- sql注入 练手网站_靶场sql注入练手----sqlmap篇(纯手打)
绝大数情况下,管理员的账号密码都在admin表里 查询字段名 构造 ?id=1 and 1=2 union select 1,column_name from information_schema.c ...
- [Mysql] 防御和检查SQL注入攻击的手段
SQL注入攻击的种类 知彼知己,方可取胜.首先要清楚SQL注入攻击有哪些种类. 1.没有正确过滤转义字符 在用户的输入没有为转义字符过滤时,就会发生这种形式的注入式攻击,它会被传递给一个SQL语句.这 ...
- sql注释符注入防御_WAF的SQL注入绕过手段和防御技术
一.关于SQL注入 SQL注入是一种常见的入侵WEB应用的手法.SQL注入是利用应用系统的编程漏洞和SQL语言的语法特征,改变原始的SQL语句执行逻辑而产生的. 攻击者向Web应用发送精心构造的输入数 ...
- mysql注入扫描网站漏洞工具_国产SQL注入漏洞测试工具 - 超级SQL注入工具(SSQLInjection)...
此工具为本人对C#.Socket及HTTP协议.SQL注入进行深入研究后,闲暇时间做的一款SQL注入工具.不说秒SQLMap,直接秒杀什么webcruiser.Safe3SI.pangolin.hav ...
- mysql注入漏洞语句,web安全之sql注入漏洞
概念 通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.通俗地讲,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力 ...
- 怎么进行mysql注入测试_MySQL for Java的SQL注入测试
只要你学JDBC,基本上所有的人都会和你说,Statement不能防止SQL注入, PreparedStatement能够防止SQL注入. 基本上参加工作了一段时间之后还是这么认为的, 没错, 这句是 ...
- SQL注入是什么,怎么防止SQL注入?
SQL注入是什么,怎么防止SQL注入? 一.什么是SQL注入? SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录 ...
- php如何防sql注入,如何在PHP中防止SQL注入
本篇文章将给大家介绍关于PHP中的SQL注入以及使用PHP-MySQLi和PHP-PDO驱动程序防止SQL注入的方法.下面我们来看具体的内容. 简单的SQL注入示例 例如,A有一个银行网站.已为银行客 ...
- mysql in sql注入_在 SQL 注入攻击中检查数据库
原文来自:PORTSWIGGER WEB SECURITY >> Web Security Academy >>Examining the database >>E ...
- mysql注入带外通道攻击_防止SQL注入攻击的方法
防止SQL注入攻击的方法 发布时间:2020-08-25 14:18:13 来源:亿速云 阅读:78 作者:小新 小编给大家分享一下防止SQL注入攻击的方法,相信大部分人都还不怎么了解,因此分享这篇文 ...
最新文章
- iphone无线充电充电测试软件,无线充电哪家强?5款Qi无线充电板横向测评
- 选择判断语句(switch)
- Shell学习笔记1-2
- 路由协议:RIP/OSPF/BGP—Vecloud微云
- Tomcat 安装与使用
- 棋牌游戏服务器架构: 总体设计
- T1串口波特率的计算方法
- T-SQL编程基础之一:变量与基本语句
- VC 创建NT服务程序
- creo数控编程怎么样_邹军:通过数控宏程序实现刀具寿命管理
- c语言2维动态数组,如何创建一个动态2维数组?
- 数据结构:栈的了解与示例(逆波兰表达式)
- Java常量什么时候被回收,JVM GC调优(2)-GC算法判定对象可以被回收(部分摘自深入理解Java虚拟机) - Java 技术驿站-Java 技术驿站...
- Java程序员必备的11大Intellij插件
- 基于UDP的简易网络聊天室
- 钉钉群机器人通知中的图片,突然不显示了
- mongodb基本命令及操作
- Android蓝牙打印机功能开发完整Demo
- 绕过content-type检测文件类型上传webshell
- PCL学习笔记(十八)-- ConditionalRemoval和RadiusOutliersRemoval滤波器移除离群点