记一次网站漏洞修复经历

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_22607961/article/details/81490706

记一次网站漏洞修复经历

公司开发的一个电商型网站,扫描之后发现有部分的漏洞,我把这些漏洞分为以下几类
1.跨站脚本
2.框架注入
3.链接注入
4.基于HTTP连接的登录请求
以下会整理一下这几种类型的漏洞的原因和解决办法

跨站脚本攻击

1
一般是通过修改url参数,使程序渲染到页面中的css/js 执行入侵者的代码,跨站脚本攻击分成以下几种:

1、本地跨站脚本攻击
B给A发送一个恶意构造的Web URL,A点击查看了这个URL,并将该页面保存到本地硬盘(或B构造的网页中存在这样的功能)。A在本地运行该网页,网页中嵌入的恶意脚本可以A电脑上执行A持有的权限下的所有命令。

2、反射跨站脚本攻击
A经常浏览某个网站,此网站为B所拥有。A使用用户名/密码登录B网站,B网站存储下A的敏感信息(如银行帐户信息等)。C发现B的站点包含反射跨站脚本漏洞,编写一个利用漏洞的URL,域名为B网站,在URL后面嵌入了恶意脚本(如获取A的cookie文件),并通过邮件或社会工程学等方式欺骗A访问存在恶意的URL。当A使用C提供的URL访问B网站时,由于B网站存在反射跨站脚本漏洞,嵌入到URL中的恶意脚本通过Web服务器返回给A,并在A浏览器中执行,A的敏感信息在完全不知情的情况下将发送给了C。

3、持久跨站脚本攻击
B拥有一个Web站点,该站点允许用户发布和浏览已发布的信息。C注意到B的站点具有持久跨站脚本漏洞,C发布一个热点信息,吸引用户阅读。A一旦浏览该信息,其会话cookies或者其它信息将被C盗走。持久性跨站脚本攻击一般出现在论坛、留言簿等网页,攻击者通过留言,将攻击数据写入服务器数据库中,浏览该留言的用户的信息都会被泄漏。

针对跨站脚本攻击的解决方式为:
1.对于已经知道固定值的,可以优先考虑对输入的参数限制/转换固定的范围值
例如:http://XXX.XXX.xom/list.html?id=408,这边的id只允许整型,则在获取使用的时候直接先转换一下,如下:

$id = intval(_GET['id']);

再举个例子比如有个页面的访问地址为:http://XXX.XXX.xom/list.html?status=finish,这边参数有固定值,在获取的时候可以将这个参数限制,如下:

$status = $_GET['status'];
if ($status != 'finish'){
   //非法参数
}

2参数是未知的时候,采用以下方式处理。
- 过滤参数的特殊字符:

[1] | (竖线符号)
[2] & (& 符号)
[3];(分号)
[4] $(美元符号)
[5] %(百分比符号)
[6] @(at 符号)
[7] ‘(单引号)
[8] “(引号)
[9] \’(反斜杠转义单引号)
[10] \”(反斜杠转义引号)
[11] < >(尖括号)
[12] ()(括号)
[13] +(加号)
[14] CR(回车符,ASCII 0x0d)
[15] LF(换行,ASCII 0x0a)
[16] ,(逗号)
[17] \(反斜杠)

-输出到页面中的内容需要转码,使用htmlspecialchars函数

3、设置cookie=httponly,这个设置是干嘛用的呢,这边解释一下

如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性

不过即便是这样,开发过程中也尽量不要将重要信息存入cookie

在php.ini中增加如下配置
session.cookie_httponly = 1

框架注入

与跨站脚本一样,也是入侵修改url,增加iframe标签,从而达到入侵的效果。例如:
URL:http://www.XXXom/item-list.html?cat_id=408
入侵:cat_id=408, frame_inj: #*/-->'");></iframe></script></style></title></textarea><iframe src=http://www.anonymous.com>

具体解决方案:
1.同跨站脚本的处理方式,进行参数的转换以及未知参数的过滤
2.可以针对关键词进行过滤,例如:

‘javascript’, ‘vbscript’, ‘expression’, ‘applet’, ‘meta’, ‘xml’, ‘blink’, ‘link’, ‘style’, ‘script’, ‘embed’, ‘object’, ‘iframe’, ‘frame’, ‘frameset’, ‘ilayer’, ‘layer’, ‘bgsound’, ‘title’, ‘base’ 等,具体需根据自己的需求进行过滤

链接注入

链接注入”是修改站点内容的行为,其方式为将外部站点的 URL 嵌入其中,或将有易受攻击的站点中的脚本 的 URL 嵌入其中。将 URL 嵌入易受攻击的站点中,攻击者便能够以它为平台来启动对其他站点的攻击,以及攻击这个易受攻击的站点本身。
在这些可能的攻击中,有些需要用户在攻击期间登录站点。攻击者从这一易受攻击的站点本身启动这些攻击,成功的机会比较大,因为用户登录的可能性更大。
“链接注入”漏洞是用户输入清理不充分的结果,清理结果会在稍后的站点响应中返回给用户。攻击者能够将危险字符注入响应中,便能够嵌入 URL 及其他可能的内容修改。

一下是示例,比如请求地址中有个参数,为name,请求的地址为:http://www.xxx.com/user.php?name=marry,会得到以下响应
<HTML>
<header>
</header>
<body>
This is marry
</body>
</HTML>

然而,恶意的用户可以发送下列请求:
HTTP://www.xxx.com/index.php?name=
这会返回下列响应:


This is .

猜你喜欢

转载自blog.csdn.net/qq_22607961/article/details/81490706