一、前端安全
1.浏览器同源政策
同源政策是浏览器的一个安全政策
- 目的:是为了防止将用户信息恶意的盗取传输
- 同源含义:域名(IP),协议头, 端口三者相同
- MDN同源政策的内容:
1.通常允许跨域写操作 :重定向以及表单提交。
2.通常允许跨域资源嵌入:script\link\img\video\iframe
3.不允许跨域读操作: ajax
URL | 结果 | 原因 |
---|---|---|
http://store.company.com/dir2/other.html | 同源 | 只有路径不同 |
http://store.company.com/dir/inner/another.html | 同源 | 只有路径不同 |
https://store.company.com/secure.html | 失败 | 协议不同 |
http://store.company.com:81/dir/etc.html | 失败 | 端口不同 (http://默认端口是80) |
http://news.company.com/dir/other.html | 失败 | 主机不同 |
不允许跨域读操作, 那么就代表了有三种操作会受到同源政策的限制。
即不同源网站间的AJAX的请求,网站间的DOM操作,以及两者间的cookie和indexDB之间的访问。
即同源政策通过限制你获取当前用户记录在其他源下的cookie等
记录在浏览器端的用户数据,以及限制了使用AJAX发送数据到其他的源的方式,以此来保障安全。
2.CORS
- CORS - Cross Origin Resourse-Sharing - 跨站资源共享
由于浏览器的安全策略——同源政策,进行web开发经常会遇到跨域问题.
于是在XMLHttpRequest v2标准下,提出了CORS(Cross Origin Resourse-Sharing)的模型,试图提供安全方便的跨域读写资源。目前主流浏览器均支持CORS。
CORS定义了两种跨域请求,简单跨域请求和非简单跨域请求。
1、CORS 请求类型
- 简单跨域请求:请求方法为HEAD,GET,POST;请求头只有4个字段,Accept,Accept-Language,Content-Language,Last-Event-ID;
如果设置了Content-Type,则其值只能是application/x-www-form-urlencoded,multipart/form-data,text/plain。 - 非简单请求:不满足简单跨域请求的请求;
2、CORS CORS流程
浏览器对简单请求和非简单请求的处理机制不一样。
当我们需要发送一个跨域请求的时候,浏览器会首先检查这个请求,如果它符合上面所述的简单跨域请求,浏览器就会立刻发送这个请求。
如果浏览器检查之后发现这是一个非简单请求,比如请求头含有X-Forwarded-For字段。这时候浏览器不会马上发送这个请求,
而是有一个preflight,跟服务器验证的过程。如果预检通过,则发送这个请求,否则就不拒绝发送这个跨域请求。
浏览器和服务器的合作判定步骤如下:
- 浏览器先根据同源策略对前端页面和后台交互地址做匹配,若同源,则直接发送数据请求;若不同源,则发送跨域请求。
- 服务器解析程序收到浏览器跨域请求后,根据自身配置返回对应文件头。若未配置过任何允许跨域,则文件头里不包含Access-Control-Allow-origin字段,
若配置过域名,则返回Access-Control-Allow-origin+ 对应配置规则里的域名的方式。 - 浏览器根据接受到的http文件头里的Access-Control-Allow-origin字段做匹配,若无该字段,说明不允许跨域;若有该字段,则对字段内容和当前域名做比对,
如果同源,则说明可以跨域,浏览器发送该请求;若不同源,则说明该域名不可跨域,不发送请求
3.CORF
- CSRF - Cross-Site Request Forgery - 跨站请求伪造
同源政策通过限制你获取当前用户记录在其他源下的cookie等记录在浏览器端的用户数据,以及限制了使用AJAX发送数据到其他的源的方式,以此来保障安全。
csrf利用的是同源政策允许跨域表单提交,以及允许跨域请求资源完成的攻击。
4.SQL注入
发生原因:
SQL注入漏洞,主要是开发人员在构建代码时,没有对输入边界进行安全考虑,导致攻击者可以通过合法的输入点提交一些精心构造的语句,从而欺骗后台数据库对其进行执行,导致数据库信息泄漏的一种漏洞。
比如我们期望用户输入整数的id,但是用户输入了上图中下面的语句,这是条能被正常执行的SQL语句,导致表中的数据都会输出。
SQL注入攻击流程
第一步:注入点探测
自动方式:使用web漏洞扫描工具,自动进行注入点发现
手动方式:手工构造SQL注入测试语句进行注入点发现
第二步:信息获取
通过注入点取得期望得到的数据
1.环境信息:数据库类型,数据库版本,操作系统版本,用户信息等
2.数据库信息:数据库蜜罐,数据库表,表字段,字段内容等(加密内容破解)
第三步:获取权限
获取操作系统权限:通过数据库执行shell,上传木马
实例:https://www.cnblogs.com/dogecheng/p/11616282.html