SQL 登录注入脚本_常见web安全问题,SQL注入、XSS、CSRF,基本原理以及如何防御...

07cc40ad-e111-eb11-8da9-e4434bdf6706.png

1.SQL注入

原理:

1).SQL命令可查询、插入、更新、删除等,命令的串接。而以分号字元为不同命 令的区别。(原本的作用是用于SubQuery或作为查询、插入、更新、删除……等 的条件式)

2).SQL命令对于传入的字符串参数是用单引号字元所包起来。(但连续2个单引 号字元,在SQL资料库中,则视为字串中的一个单引号字元)

3).SQL命令中,可以注入注解

预防:

1).在设计应用程序时,完全使用参数化查询(Parameterized Query)来设计数据 访问功能。

2).在组合SQL字符串时,先针对所传入的参数作字元取代(将单引号字元取代为 连续个单引号字元)。

3).如果使用PHP开发网页程序的话,亦可打开PHP的魔术引号(Magic quote)功 能(自动将所有的网页传入参数,将单引号字元取代为连续2个单引号字元)。

4).其他,使用其他更安全的方式连接SQL数据库。例如已修正过SQL注入问题的 数据库

5).连接组件,例如ASP.NET的SqlDataSource对象或是 LINQ to SQL。

使用SQL防注入系统。

2. XSS攻击

原理:

xss攻击可以分成两种类型:

1.非持久型xss攻击

非持久型xss攻击是一次性的,仅对当次的页面访问产生影响。非持久型xss攻击 要求用户访问一个被攻击者篡改后的链接,用户访问该链接时,被植入的攻击脚本 被用户游览器执行,从而达到攻击目的。

2.持久型xss攻击

持久型xss攻击会把攻击者的数据存储在服务器端,攻击行为将伴随着攻击数据

一直存在。下面来看一个利用持久型xss攻击获取session id的实例。

防范:

1.基于特征的防御

XSS漏洞和著名的SQL注入漏洞一样,都是利用了Web页面的编写不完善,所以每一个漏洞所利用和针对的弱点都不尽相同。这就给XSS漏洞防御带来了困难:不可能以单一特征来概括所有XSS攻击。

传统XSS防御多采用特征匹配方式,在所有提交的信息中都进行匹配检查。对于这种类型的XSS攻击,采用的模式匹配方法一般会需要对“javascript”这个关键字进行检索,一旦发现提交信息中包含“javascript”,就认定为XSS攻击。这种检测方法的缺陷显而易见:骇客可以通过插入字符或完全编码的方式躲避检测:

1). 在javascript中加入多个tab键,得到

;

2). 在javascript中加入(空格)字符,得到

;

3). 在javascript中加入(回车)字符,得到

;

4). 在javascript中的每个字符间加入回车换行符,得到

5). 对”javascript:alert(‘XSS’)”采用完全编码,得到

上述方法都可以很容易的躲避基于特征的检测。而除了会有大量的漏报外,基于特征的

还存在大量的误报可能:在上面的例子中,对上述某网站这样一个地址,由于包含了关键字“javascript”,也将会触发报警。

2.基于代码修改的防御

和SQL注入防御一样,XSS攻击也是利用了Web页面的编写疏忽,所以还有一种方法就是从Web应用开发的角度来避免:

对所有用户提交内容进行可靠的输入验证,包括对URL、查询关键字、HTTP头、POST数据等,仅接受指定长度范围内、采用适当格式、采用所预期的字符的内容提交,对其他的一律过滤。

实现Session标记(session tokens)、CAPTCHA系统或者HTTP引用头检查,以防功能被第三方网站所执行。

确认接收的的内容被妥善的规范化,仅包含最小的、安全的Tag(没有javascript),去掉任何对远程内容的引用(尤其是样式表和javascript),使用HTTP only的cookie。

3. CSRF攻击

原理:

CSRF攻击原理比较简单,假设Web A为存在CSRF漏洞的网站,Web B为攻 击者构建的恶意网站,User C为Web A网站的合法用户。

1.用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用 户登录网站A成功,可以正常发送请求到网站A;

3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

4.网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访 问第三方站点A;

5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的 情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是 由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致 来自网站B的恶意代码被执行。

防范:

1.检查Referer字段

HTTP头中有一个Referer字段,这个字段用以标明请求来源于哪个地址。在 处理敏感数据请求时,通常来说,Referer字段应和请求的地址位于同一域 名下。以上文银行操作为例,Referer字段地址通常应该是转账按钮所在的 网页地址,应该也位于www.examplebank.com之下。而如果是CSRF攻击传 来的请求,Referer字段会是包含恶意网址的地址,不会位于 www.examplebank.com之下,这时候服务器就能识别出恶意的访问。

2.添加校验token

由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求 在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击 者无法伪造的数据作为校验,那么攻击者就无法再执行CSRF攻击。这种数据 通常是表单中的一个数据项。服务器将其生成并附加在表单中,其内容是一个 伪乱数。当客户端通过表单提交请求时,这个伪乱数也一并提交上去以供校验。 正常的访问时,客户端浏览器能够正确得到并传回这个伪乱数,而通过CSRF 传来的欺骗性攻击中,攻击者无从事先得知这个伪乱数的值,服务器端就会因 为校验token的值为空或者错误,拒绝这个可疑请求。

更多资料分享戳一戳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序navigateBack如何带参数

wx.navigateBack({//返回 delta:1 }) 方法如下: 一. var pages getCurrentPages(); var prevPage pages[pages.length - 2]; //上一个页面 //直接调用上一个页面的setData()方法,把数据存到上一个页面中去 prevPage.setData({ mydata: {a:1, b:2} }) 二…

删除苹果自带软件后果_苹果IOS备忘录便签软件敬业签恢复删除内容应该怎么操作?...

敬业签是一款功能比较全面的苹果手机桌面备忘录便签软件,主要功能包括:云储存、多端云同步、提醒待办事项、时间管理、标记已完成、月视图和时间轴等。在使用苹果IOS备忘录便签软件敬业签的时候,如果不小心误删了内容,要想恢复的话…

repr方法字符串输出实例对象的值

#codingutf-8 #repr方法字符串输出实例对象的值 class CountFromBy(object):def __init__(self, val0, incr1):self.val valself.incr incrdef increase(self):self.val self.incrdef __repr__(self):return str(self.val)>>> c CountFromBy() >>> c 0 转…

OpenCV 获取摄像头并显示摄像头视频

OpenCV 获取摄像头&#xff0c;新建窗口显示摄像头视频 结合Leaning OpenCV 第二个例子 显示一个视屏文件 写了一下 获取摄像头的代码为并且创建窗口显示的代码为&#xff1a;#include "stdafx.h"#include <cv.h>#include <cxcore.h>#include <highg…

ubuntu安装提醒写入失败 没有启动项_手把手教你如何安装windo10+Ubuntu18.10双系统...

踩坑经历以前一直都是用win10系统在自己的电脑上开发&#xff0c;在公司也都是用Ubuntu系统&#xff0c;现在想在自己的笔记本上安装一个Ubuntu系统&#xff0c;所以就想着在不用重装系统的情况下&#xff0c;装一个Ubuntu系统&#xff0c;所以就准备装一个双系统&#xff0c;安…

图像处理常用边缘检测算子总结

不同图像灰度不同&#xff0c;边界处一般会有明显的边缘&#xff0c;利用此特征可以分割图像。需要说明的是&#xff1a;边缘和物体间的边界并不等同&#xff0c;边缘指的是图像中像素的值有突变的地方&#xff0c;而物体间的边界指的是现实场景中的存在于物体之间的边界。有可…

但行好事,莫问前程!

一次看超级演说家的时候听乐嘉说过这么一句话&#xff1a;“你在讲你爹&#xff0c;我在想我爹&#xff0c;这是演讲的最高境界”&#xff0c;我觉得不仅演讲&#xff0c;共鸣应该是无处不在&#xff0c;我们往往可能因为别人的一句话就幡然醒悟&#xff0c;茅塞顿开&#xff0…

用SQL语句向表格中插入数据

向表格中插入数据SQL语言使用insert语句向数据库表格中插入或添加新的数据行。Insert语句的使用格式如下&#xff1a; insert into tablename (first_column,...last_column) values (first_value,...last_value); 例如&#xff1a; insert into employee (firstname, lastnam…

微信开发者工具 wxmi修改模版颜色_网站建设公司讲解:微信小程序的开发者工具界面...

网站建设公司深圳市博纳网络信息技术有限公司()讲解&#xff1a;微信小程序的开发者工具界面创建项目后&#xff0c;进入到微信开发者工具界面&#xff0c;界面大致可以分为6个区域&#xff1a;①菜单栏区域&#xff0c;②模拟器、编辑器、调试器显示与隐藏区域&#xff0c;③模…

面向接口编程详解

博文地址&#xff1a; 思想基础 http://www.cnblogs.com/leoo2sk/archive/2008/04/10/1146447.html 编程实例 http://www.cnblogs.com/leoo2sk/archive/2008/04/11/1148236.html 模式研究 http://www.cnblogs.com/leoo2sk/archive/2008/04/14/1151569.html转载于:https://www.…

【微信小程序】数组操作

Page({data: {list:[{id:1,name:应季鲜果,count:1},{id:2,name:精致糕点,count:6},{id:3,name:全球美食烘培原料,count:12},{id:4,name:无辣不欢生猛海鲜,count:5}]} }) 一、向前向后新增数组 //假设这一段是我们要新增的数组 var newarray [{id:5,name:向后增加数据--new Dat…

cocos 禁掉快速点击_win10系统快速运行debug程序的技巧

win10系统快速运行debug程序的技巧dosBox和程序对很多用户来说都是非常陌生的&#xff0c;其中debug对用户来说亦是如此&#xff0c;其实debug程序是开发工具中的一种&#xff0c;作为系统中预装的开发工具在系统中存在自然会有它的用处。但是在平时需要使用的时候并没有快速能…

shell 文件内容替换 sed用法

调用sed命令有两种形式&#xff1a;sed [options] command file(s)sed [options] -f scriptfile file(s)删除&#xff1a;d命令 $ sed 2d example-----删除example文件的第二行。$ sed 2,$d example-----删除example文件的第二行到末尾所有行。$ sed $d example-----删除exam…

js 利用事件委托解决mousedown中的click

有一个需求是这样的&#xff1a; 父元素div绑定一个mousedown事件&#xff0c;子元素a绑定一个click事件。 看解构&#xff1a; <div id"nav"><a href"javascript:void(0);">点我</a></div>搜了很多相关的都没有解决办法&#xff…

带孩子们做环球旅行的读后感_父母带孩子做心理咨询,需要注意哪些事项?

最近&#xff0c;带孩子来做心理咨询的父母接踵而至&#xff0c;但是很多时候&#xff0c;父母可能无意识会有一些影响心理咨询与治疗的效果的行为&#xff0c;对于他们来说&#xff0c;可能需要注意这几点&#xff1a;1、守时心理咨询需要精力与时间&#xff0c;一般咨询师为了…

OpenCV函数cvFindContours

提取轮廓在OpenCV里有一个函数 cvFindContours&#xff1a;int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,int header_sizesizeof(CvContour),int modeCV_RETR_LIST,int methodCV_CHAIN_APPROX_SIMPLE, CvPoint offsetcvPoint(0,0) );这个函…

table tr th td

控制th 宽度相同&#xff1a; table{display: -webkit-box;table-layout:fixed; border: none;max-width:120%;min-width:100%;} table tbody tr th{ width:200px !important; border:1px solid #333;} td{border:1px solid #333;}控制 俩行变为一行 &#xff1a; colspan"…

消息队列控制灯代码_代码实现RabbitMQ死信队列的创建

‍‍前言&#xff1a;‍‍之前有写过死信队列的使用场景以及通过管控台创建死信。这次就通过代码实现死信队列的创建&#xff0c;同时也分享一下RabbitMQ封装的类。准备&#xff1a;1. 先准备一个死信队列(最后用来消费)的参数配置&#xff0c;包括虚拟机&#xff0c;交换机&am…

Deep Learning(深度学习)

Deep Learning&#xff08;深度学习&#xff09;ufldl的2个教程(这个没得说&#xff0c;入门绝对的好教程&#xff0c;Ng的&#xff0c;逻辑清晰有练习)&#xff1a;一ufldl的2个教程(这个没得说&#xff0c;入门绝对的好教程&#xff0c;Ng的&#xff0c;逻辑清晰有练习)&…

0.Boot Loader的概念和功能

转载&#xff1a;http://blog.chinaunix.net/uid-20543672-id-94371.html 1、嵌入式Linux软件结构与分布 在一般情况下嵌入式Linux系统中的软件主要分为以下及部分&#xff1a; &#xff08;1&#xff09;引导加载程序&#xff1a;其中包括内部ROM中的固化启动代码和Boot Loade…