CruxF / Blog

个人博客,记载学习的点点滴滴,怕什么技术无穷,进一寸有一寸的欢喜:sparkles:

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

前端工程师面试指南——安全篇

CruxF opened this issue · comments

XSS(跨站脚本攻击)

  • 概念: 恶意攻击者往Web页面里插入恶意的脚本代码,当用户浏览该网页时,嵌入其中的脚本会被执行,从而达到恶意攻击用户的目的。
  • 分类: 内部攻击,主要是利用程序自身的漏洞,构造跨站语句;外部攻击,主要是自己构造XSS跨站漏洞网页或者寻找非目标以外的有跨站漏洞的网页。
  • 类型: 存储型XSS,持久化,代码是存储在服务器中的,如在个人信息或发表文章等地方,假如代码,如果没有过滤或者过滤不严,那么这些代码将储存到服务器中,用户访问该页面时触发代码执行;反射型XSS,非持久化,需要欺骗用户自己去点击链接才能触发XSS代码(服务器中没有这样的页面和内容),一般容易出现搜索页面。
  • 防范: 设置httpOnly,禁止用document.cookie操作;输入检查,在用户输入的时候进行格式检查;
    对输出转义。

XSRF(跨站请求伪造)

  • 概念: 跨站请求伪造是一种对网站的恶意利用,尽管听起来像是跨站请求攻击(XSS),但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行,导致对其进行防范的资源也相当稀少,因此难以防范,所以被认为比XSS更具有危险性。
  • 小栗子: 攻击通过在授权用户访问的页面中包含链接或者脚本的方式工作。例如:一个网站用户A可能正在浏览聊天论坛,而同时另一个用户B也在此论坛中,并且后者刚刚发布了一个具有A银行链接的图片消息。设想一下,B编写一个在A的银行站点上进行取款的form提交的链接,并将此链接作为图片src。如果A的银行在cookie中保存他的授权信息,并且cookie没有过期,那么当A的浏览器尝试装载图片时将提交这个取款form和他的cookie,这样在没经A同意的情况下便授权了这次事务。

  • 攻击原理
    image
    防范:
    (1)检查 Referer 字段:这个字段用以标明请求来源于哪个地址。在处理敏感数据请求时,通常来说,Referer 字段应和请求的地址位于同一域名下。
    (2)添加校验 Token:这种数据通常是表单中的一个数据项。服务器生成token并附加在表单中,其内容是一个伪乱数。当客户端通过表单提交请求时,这个伪乱数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪乱数,而通过 CSRF 传来的欺骗性攻击中,攻击者无从事先得知这个伪乱数的值,服务器端就会因为校验 Token 的值为空或者错误,拒绝这个可疑请求。
    (3)通过输入验证码来校验合法请求。

SQL注入

  • 攻击方式: 服务器上的数据库运行非法的 SQL 语句,主要通过拼接字符串的形式来完成,改变sql语句本身的语义。通过sql语句实现无账号登陆,甚至篡改数据库。

防御:
(1)使用参数化查询:使用预编译语句,预先编译的 SQL 语句,并且传入适当参数多次执行。由于没有拼接的过程,因此可以防止 SQL 注入的发生。 使用preparedStatement的参数化sql,通过先确定语义,再传入参数,就不会因为传入的参数改变sql的语义。(通过setInt,setString,setBoolean传入参数)
(2)单引号转换:将传入的参数中的单引号转换为连续两个单引号,PHP 中的 Magic quote 可以完成这个功能。
(3)检查变量数据类型和格式。
(4)使用正则表达式过滤传入的参数,对特殊符号过滤或者转义处理。