熟悉面试中常见的的 web 安全问题

背景

之前出去面试的时候, 经常会被问到一些安全方面的问题。

安全涉及的领域很大, 我也仅仅是了解一些皮毛, 每次面试前都要找资料复习, 很麻烦。

所以我就根据之前搜集的一些资料和面试的经验,系统的梳理了一下,希望对大家有所帮助。

正文

首先简单介绍几种常见的攻击方式:

  1. SQL注入
  2. XSS
  3. CSRF
  4. 点击劫持
  5. 中间人攻击

1. SQL 注入

这是一种比较简单的攻击方式。

如果后台人员使用用户输入的数据来组装SQL查询语句的时候不做防范, 遇到一些恶意的输入, 最后生成的SQL就会有问题。

比如地址栏输入的是:

articlrs/index.php?id=1

发送一个get请求, 调用的查询语句是:

sql = "SELECT * FROM articles WHERE id =", $id

正常情况下, 返回 id = 1 的文章。

如果攻击者想获得所有的文章,语句就可以改成:

articlrs/index.php?id=-1 OR 1 = 1

这样就可以了, 为什么呢?

这是因为,id = -1 永远是 false,1=1 永远是true,所有整个where语句永远是ture.

所以 where 条件相当于没有加where条件,那么查询的结果相当于整张表的内容,攻击者就达到了目的。

现在的系统一般都会加入 过滤 和 验证 机制, 可以有效预防SQL注入问题。

2. XSS

XSS 全称是跨站脚本攻击

通过代码注入的方式来达到攻击的目的。

我们有个社交网站,允许大家相互访问空间,网站可能是这样做的:

input> form>

你输入的内容: {{{text}}}h2>

如果你用的是Chrome浏览器, 会得到来自浏览器的警告:

Chrome 这类浏览器能自动帮助用户防御攻击, 很贴心。

但是也不是说, 只要我用Chrome就万事大吉了,该防御, 还得防御。

对于 XSS 攻击,通常来说,有两种方式可以防御:

  1. 字符转译
  2. CSP(Content Security Policy)

1.字符转译

做法就是转义输入输出的内容,对于引号、尖括号、斜杠等字符进行转义。


& 替换为:&
< 替换为:<
> 替换为:>
” 替换为:"
‘ 替换为:'
/ 替换为:/

通过转义可以将攻击代码 :


                    
                    

你可能感兴趣的:(react.js,node.js,css,html5,javascript)