一、cookie 和 session 的区别
- cookie 数据存放在客户的浏览器上,session 数据放在服务器上
- cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗。考虑到安全应当使用 session
- session 会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能。考虑到减轻服务器性能方面,应当使用 cookie
- 单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个cookie
- 将登陆信息等重要信息存放为 session
其他信息如果需要保留,可以放在 cookie 中
二、sql 注入
原理:通过把 SQL命令插入到 Web 表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令
防御:
- 永远不要信任用户的输入,要对用户的输入进行校验,可以通过正则表达式,或限制长度,对单引号和双"-"进行转换等
- 永远不要使用动态拼装 SQL,可以使用参数化的SQL 或者直接使用存储过程进行数据查询存取
- 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接
- 不要把机密信息明文存放,请加密或者 hash 掉密码和敏感的信息
三、XSS(cross-site scripting)
定义:Xss攻击指的是攻击者往 Web 页面里插入恶意 html 标签或者 javascript 代码
比如:攻击者在论坛中放一个看似安全的链接,骗取用户点击后,窃取cookie 中的用户私密信息;或者攻击者在论坛中加一个恶意表单,当用户提交表单的时候,却把信息传送到攻击者的服务器中,而不是用户原本以为的信任站点。
防御:
- X首先代码里对用户输入的地方和变量都需要仔细检查长度和对”<”,”>”,”;”,”’”等字符做过滤; 其次任何内容写到页面之前都必须加以encode, 避免不小心把html tag 弄出来。这一个层面做好,至少可以堵住超过一半的 XSS 攻击
- 避免直接在 cookie 中泄露用户隐私,例如 email、密码等等
- 通过使 cookie 和系统 ip 绑定来降低 cookie 泄露后的危险。这样攻击者得到的 cookie 没有实际价值,不可能拿来重放
- 尽量采用 POST 而非 GET 提交表单
四、GESF 跨站点请求伪造(Cross—Site Request Forgery)
1.过程:
(1)用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A
(2)在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A
(3) 用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B
(4)网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A
(5)浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。
2. 检测:
检测CSRF漏洞是一项比较繁琐的工作,最简单的方法就是抓取一个正常请求的数据包,去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞
3.防御
(1)验证 HTTP Referer 字段
(2)在请求地址中添加 token 并验证
(3)在 HTTP 头中自定义属性并验证
(4)验证码