XSS跨站脚本:
XSS其实就是html的注入问题,后台程序并没有对攻击者的输入做严格的控制,使得攻击者最终控制了数据库,并且显示给来访的用户,导致可以让访客的浏览器以浏览者的身份执行这些html代码,数据的流程如下:
攻击者的Html输入—>web程序—>进入数据库—>web程序—>用户浏览器。
攻击者的手段和目的:
主要是以别人的身份访问一些特定的网站,达成自己的目的,如进行一些不正当的投票活动;
漏洞的防御和利用:
避免XSS的方法之一,主要是对用户输入的数据进行过滤,每个语言都有对应的html过滤函数或处理方法:
1 2 3 4 5 6 | PHP的htmlentities()或是htmlspecialchars()。 Python的cgi.escape()。 ASP的Server.HTMLEncode()。 ASP.NET的Server.HtmlEncode()或功能更强的Microsoft Anti-Cross Site Scripting Library Java的xssprotect(Open Source Library)。 Node.js的node-validator。 |
CSRF:
XSS 是实现 CSRF 的诸多途径中的一条,但绝对不是唯一的一条。一般习惯上把通过 XSS 来实现的 CSRF 称为 XSRF。
CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。绝大多数网站还是通过cookie来辨别用户身份,所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
要完成一次CSRF攻击,受害者必须依次完成两个步骤:
1 2 | 1.登录受信任网站A,并在本地生成Cookie。 2.在不登出A的情况下,访问危险网站B。 |
有效的防御方法:
请求令牌(token令牌),在表单的提交的时候,携带此参数(具体请看token如何实现);
使用验证码,只要涉及到数据交互就先验证,但是出于用户体验考虑,不可能每一步都加上,所以这只是一种辅助手段;
参考:
https://www.cnblogs.com/jxl1996/p/10186952.html
https://www.freebuf.com/articles/web/39234.html