XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。

之前就了解过这方面的知识,但是没有系统地总结。今天在这总结一下,也让自己在接下来的面试有个清晰的概念。


XSS跨站脚本攻击:

xss 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets,CSS)缩写混淆,所以将跨站脚本攻击缩写为xss。Xss是攻击者在web页面插入恶意的代码。当用户浏览该页面的时候,代码执行,从而实现攻击目的。对受害用户可能采取Cookie资料窃取、会话劫持、钓鱼欺骗等各种攻击。

XSS跨站脚本攻击分为:

  1. 反射型XSS
    反射性XSS,也就是非持久性XSS。用户点击攻击链接,服务器解析后响应,在返回的响应内容中出现攻击者的XSS代码,被浏览器执行。一来一去,XSS攻击脚本被web server反射回来给浏览器执行,所以称为反射型XSS。

下面举例子说明:

http://xxx.com?username=yang

//页面输出
hello yang

//如果我把上面的url变成这样,同时服务器没有做过滤
http://xxx.com?username=

//页面会出现弹框,显示xss;

你也许会说,这样的URL一看就有问题,怎么会有人点击?,是的,这类的URL会让人怀疑,但如果使用短网址服务将之缩短,你还看得出来么?

  1. 持久型XSS
    指通过提交恶意数据到服务器的数据库。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为:恶意用户的Html输入Web程序->进入数据库->Web程序->用户浏览器。

XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。_第1张图片
说一个很常见的微博评论:如果不做过滤的话,很容易造成持久性xss攻击,当用户访问已经被插入恶意代码的页面,很容易被攻击。

  1. DOM-based XSS
    基于DOM的XSS,也就是web server不参与,仅仅涉及到浏览器的XSS。比如根据用户的输入来动态构造一个DOM节点,如果没有对用户的输入进行过滤,那么也就导致XSS攻击的产生。

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Titletitle>
head>
<body>
<form action="#">
    <label>please input your name:label>
    <input type="text" id="username">
    <input id="sbm" type="submit" value="submit">
form>
<div id="container">

div>
<script>
    function getUserName(){
        var btn=document.getElementById("sbm");
        btn.addEventListener("click",function(e){
            e.preventDefault();
            document.getElementById("container").innerHTML=document.getElementById("username").value;
        },false)
    }
    getUserName();

script>

body>
html>

XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。_第2张图片

如果我在输入框中输入会出现什么情况
XSS跨站脚本攻击与CSRF跨站请求伪造攻击的学习总结。_第3张图片
这时候很容易被攻击了。


xss的防御
现在的XSS如此流行,原因何在。我想大家应该都知道,就是在输入的时候没有做严格的过滤,而在输出的时候,也没有进行检查,转义,替换等。

下面说几点防御的方法:

  原则:不相信客户输入的数据
  注意:  攻击代码不一定在中

  1.使用XSS Filter。

  输入过滤,对用户提交的数据进行有效性验证,仅接受指定长度范围内并符合我们期望格式的的内容提交,阻止或者忽略除此外的其他任何数据。比如:电话号码必须是数字和中划线组成,而且要设定长度上限。过滤一些些常见的敏感字符,例如:< > ‘ “ & # \ javascript expression  "οnclick="  "onfocus";过滤或移除特殊的Html标签, 例如: 
                    
                    

你可能感兴趣的:(http)