Web安全总结摘录

借助刚才看到的文章,回顾一下常见的Web安全问题:XSS、CSRF、SQL注入漏洞。

一、XSS

XSS (Cross Site Script),跨站脚本攻击,因为缩写和 CSS (Cascading Style Sheets) 重叠,所以只能叫 XSS。

XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。
为了防止出现非持久型 XSS 漏洞,需要确保这么几件事情:

  1. Web 页面渲染的所有内容或者渲染的数据都必须来自于服务端。
  2. 尽量不要从 URL,document.referrer,document.forms 等这种 DOM API 中获取数据直接渲染。
  3. 尽量不要使用 eval, new Function(),document.write(),document.writeln(),window.setInterval(),window.setTimeout(),innerHTML,document.creteElement() 等可执行字符串的方法。
  4. 如果做不到以上几点,也必须对涉及 DOM 渲染的方法传入的字符串参数做 escape 转义。
  5. 前端渲染的时候对任何的字段都需要做 escape 转义编码。

为了防止持久型 XSS 漏洞,需要前后端共同努力:

  1. 后端在入库前应该选择不相信任何前端数据,将所有的字段统一进行转义处理。
  2. 后端在输出给前端数据统一进行转义处理。
  3. 前端在渲染页面 DOM 的时候应该选择不相信任何后端数据,任何字段都需要做转义处理。

https://zoumiaojiang.com/article/common-web-security/?hmsr=toutiao.io#xss-1

可以形成「基于字符集的 XSS 攻击」的原因是由于浏览器在 meta 没有指定 charset 的时候有自动识别编码的机制,所以这类攻击通常就是发生在没有指定或者没来得及指定 meta 标签的 charset 的情况下。

所以我们有什么办法避免这种 XSS 呢?

  1. 记住指定 <meta charset="utf-8">
  2. XML 中不仅要指定字符集为 utf-8,而且标签要闭合

二、CSRF

CSRF(Cross-Site Request Forgery),中文名称:跨站请求伪造攻击。

那么 CSRF 到底能够干嘛呢?你可以这样简单的理解:攻击者可以盗用你的登陆信息,以你的身份模拟发送各种请求。攻击者只要借助少许的社会工程学的诡计,例如通过 QQ 等聊天软件发送的链接(有些还伪装成短域名,用户无法分辨),攻击者就能迫使 Web 应用的用户去执行攻击者预设的操作。例如,当用户登录网络银行去查看其存款余额,在他没有退出时,就点击了一个 QQ 好友发来的链接,那么该用户银行帐户中的资金就有可能被转移到攻击者指定的帐户中。

防止方法:

  1. 验证请求refer。
  2. 请求增加token验证。

三、SQL
防止 SQL 注入主要是不能允许用户输入的内容影响正常的 SQL 语句的逻辑,当用户的输入信心将要用来拼接 SQL 语句的话,我们应该永远选择不相信,任何内容都必须进行转义过滤,当然做到这个还是不够的,下面列出防御 SQL 注入的几点注意事项:

  1. 严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害
  2. 后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理。
  3. 对进入数据库的特殊字符(',",,<,>,&,*,; 等)进行转义处理,或编码转换。基本上所有的后端语言都有对字符串进行转义处理的方法,比如 lodash 的 lodash._escapehtmlchar 库。
  4. 所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query 方法中的 ? 占位参数。

原文:https://zoumiaojiang.com/article/common-web-security/?hmsr=toutiao.io#xss-1

原文地址:https://www.cnblogs.com/doit8791/p/8277662.html