# 安全专题
# 攻击问题
- SQL 注入,不外乎是提交含有 SQL 操作语句的信息给后端,后端如果没有做好过滤就执行该语句,攻击者自然可以随意操纵该站点的数据库。
- XPath 注入,跟 SQL 注入差不多,只不过这里的数据库走的 xml 格式,攻击方式自然也得按 xml 查找的语法来了。
- cgi 命令执行,指的是用户远程访问 cgi 脚本时,通过提交恶意的参数让服务器执行相关的 cgi 命令来获取信息甚至操纵服务器。
对于这几个攻击,我们需要做的自然是对提交参数的过滤,最好是前端过滤一遍,后端也过滤一遍(后端的过滤和拦截是最重要的,毕竟通过在浏览器禁用脚本的配置可以躲过前端的过滤)。
# 跨站请求伪造(CSRF)
攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新。与 XSS 非常相似,但 XSS 是利用用户对当前网站的信任来发起攻击,而 CSRF 是利用网站对用户的信任来发起攻击。
# 解决方案
- 验证 HTTP Referer 参数确保请求发自正确的网站(但 XHR 请求可调用 setRequestHeader 方法来修改 Referer 报头)
- 在请求地址中添加 token 并验证。(创建一个唯一的令牌(Token),将其存在服务端的 session 中及客户端的 cookie 中,对任何请求,都检查二者是否一致)
- 在 HTTP 请求头中的 Authorization 的特定认证字段(对于任何重要的请求都需要重新验证用户的身份)
# 跨站脚本攻击(XSS)
分为存储型 XSS、反射型 XSS、MXSS(也叫 DOM XSS)
原理:攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页之时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。
# 解决方案
对提交数据的过滤,另外还有一点:谨慎返回用户提交的内容!
输入检查:对于用户的任何输入要进行检查、过滤和转义
输出检查:将有可能包含攻击内容进行必要的编码转义
HttpOnly 防止劫取 Cookie:阻止 XSS 攻击后的 Cookie 劫持攻击
# xss 与 csrf 的区别
原理不同,CSRF 是利用网站 A 本身的漏洞,去请求网站 A 的 api;XSS 是向目标网站注入攻击代码。 CSRF 需要用户先登录目标网站获取 cookie,而 XSS 不需要登录 CSRF 的目标是用户,XSS 的目标是服务器 XSS 是利用合法用户获取其信息,而 CSRF 是伪造成合法用户发起请求
# 前端点击劫持
点击劫持原理本质就是利用 iframe 实现了障眼法。
# 请求劫持
网路劫持一般值网站资源请求在请求过程中因为人为的攻击导致没有加载到预期的资源内容。
- DNS 劫持
- HTTP 劫持