基础安全知识
XSS(cross Site Scripting,跨脚本攻击)、SQL注入攻击和CSRD(Cross Request Forgery,跨站请求伪造)
XSS攻击
攻击者向目标web站点注入HTML片段或脚本,通常是由于带有页面可解析的内容的数据未经处理直接插入页面上导致的. XSS分为: 存储行XSS、反射性XSS、MXSS(DOM XSS)三种:
-
存储型XSS: 常常是前端提交的数据未经过处理直接存储到数据库然后从数据库读取出来,直接插入到页面导致的.(直接在页面插入大量不现实的页面,但是导致页面巨大造成加载页面缓慢) 反射性XSS: 可能是网页中的RUL参数注入可解析的内容导致,如果直接获取URL中不合法的参数并且插入页面,则可能出现XSS攻击 MXSS: 在渲染DOM属性的时候将攻击脚本DOM属性中被解析而导致的.
XSS的主要方法是验证输入到页面的所有内容是否安全,如果可能含有脚本标签等内容必须对用户的输入数据进行处理
-
将重要的cookie标记为http only,js中的document.cookie不能获取cookie了 只允许用户输入我们期望的数据 对数据进行html Encode处理 过滤或移出特殊的html标签
SQL注入
-
页面提交数据到服务端后,在服务器端未进行数据校验就直接将数据直接拼接到SQL进行执行,因此产生与预期不符合的现象 解决措施: 对前端网页提交的数据进行严格校验
CSRF
-
非源站点按照源站点的数据请求格式提交非法数据给源站点服务的一种攻击方式.
网络劫持请求
-
网络劫持一般指网站资源请求过程中,因为认为攻击导致没有加载到预期的资源内容. DNS劫持: 攻击者伪造或者劫持DNS服务器,然请求的域名请求到错误的服务器,然后请求到错误的数据 HTTP劫持: 在用户和浏览器的访问链路存在正常的网络通道,这中间会经过很多路由器以及运营商的网络设备.当满足一定条件的时候,就会在正常的数据包中插入或者修改攻击者的网络包达到目的. ps:一些小运营商会在网页中插入广告.
跨域问题详解
- 什么是同源策略?
同源指的是协议,域名,端口三者相同,这是一种约定,是浏览器的基本安全功能.如果缺少了XSS,CSRF攻击
- 什么是跨域请求?
当协议,域名,端口任意一个不相同时,都算作不通域,不同域之间的资源请求都算跨域.
- 请求跨域了,那么请求是没有发送,还是发送之后报错?
跨域并不是请求发不出去,请求能发出去,服务端能收到请求并正常返回结果,只是结果被浏览器拦截了.所以表单可以发送跨域请求,表单只是提交Ajax被拦截是因为他需要获取响应,浏览器认为是不安全的.
- 跨域问题解决办法
nginx代理转发,nginx通过proxy_pass 转发请求到后端,则浏览器看来前后端的域名是一个项目.在跨域域名的header上添加允许跨域头部,则浏览器拿到结果发现可以跨域则正常渲染.