安全与加密
安全
记录一些常见的安全漏洞
CSRF
CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。
一句话概括就是,通过你访问你个正常网站然后浏览器存下这个网站的cookie,然后再访问一个恶意网站,这个网站会在html中插入js脚本,然后该脚本会使用你的cookie去操作正常网站。
整个过程中,cookie都没有被窃取,脚本也不知道cookie的内容是什么,但脚本在你的浏览器环境中发送请求到正常网站时,该请求会默认携带cookie,也就是恶意脚本冒用cookie,去进行一些你不知道的操作。
总的来说,CSRF核心还是访问了恶意网站,执行脚本去请求正常网站,服务端并不知道这些操作是否用户本意,直接损害的是用户利益,所以要避免的话,还是用户别访问不安全的网站。
XSS
XSS攻击:跨站脚本攻击(Cross-Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。XSS是一种常见的web安全漏洞,它允许攻击者将恶意代码植入到提供给其它用户使用的页面中。不同于大多数攻击(一般只涉及攻击者和受害者),XSS涉及到三方,即攻击者、客户端与Web应用。
XSS主要分为两种,存储型和反射型。
存储型
存储型XSS,主要出现在让用户输入数据,供其他浏览此页的用户进行查看的地方,包括留言、评论、博客日志和各类表单等。应用程序从数据库中查询数据,在页面中显示出来,攻击者在相关页面输入恶意的脚本数据后,用户浏览此类页面时就可能受到攻击。这个流程简单可以描述为
恶意用户侧
- 恶意用户插入带有脚本的信息,发送请求
- 服务端接受请求,但没有做输入过滤,直接存储到数据库。
普通用户侧(受害者角度)
- 获取评论、博客日志或者其他各类表单信息时,获取到了恶意用户的评论,该评论中带有恶意的脚本,浏览器自动执行脚本。
反射型
反射型XSS,主要做法是将脚本代码加入URL地址的请求参数里,请求参数进入程序后在页面直接输出,用户点击类似的恶意链接就可能受到攻击。
例如,我们在百度时,都会输入关键词查询,然后跳转到查询结果的页面,该结果页面是含有查询时的关键词,也就意味着html中会含有该关键词,所以如果该关键词存在恶意脚本,那返回的查询结果的html中,实际会含有恶意脚本。
DOM型
todo
避免和小结
总的来说,XSS的核心都是在HTML中注入脚本,也是直接损害的是用户利益,但普通用户基本无法反制,所以服务端很有必要对用户各种输入做过滤。
SQL注入
SQL注入攻击(SQL Injection),简称注入攻击,是Web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。
而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL语句,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。
SQL注入,其实类似XSS攻击,也是执行一些意外的程序,但是直接损害的是服务端的数据,所以服务端很有必要对用户各种输入做过滤。
密码存储
如果你的密码只是用于校验,其实可以只存储hash值,对比请求的密码的哈希值,和实际密码的hash值即可。
如果安全性要求不高,可以进行编码,比如base64编码,但拿到该编码后的密码,在同时知道你的编码方式时,也能知道你的密码。
但如果有存储密码的需求,一定需要加密,目前主流的加密算法有AES、DES。Go语言的crypto对这两个算法都进行了支持。