跨域的整理及web安全攻击

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lihuijuan_1/article/details/86592573

一,什么是跨域

(ps:同源策略:一种约定,是浏览器最基本的安全功能。web 相当于建立在同源策略基础之上的,)
由于浏览器的同源策略,如果发生请求url的协议,域名,端口号任意一个与当前页面网址不同的,都会发生跨域
(ps域名访问对应的域名ip也会跨域:如果、www.a.com访问20.205.28.90)

二,解决跨域的方法

  • 1)proxy代理
    用法:将请求发给后台服务器,通过服务器发送请求,将请求结果发给前端
    方法:通过nginx代理
  • 2)cors(Cross-Origin resource sharing)
    用法:现代浏览器常用的一种请求跨域资源的方法
    方法:
res.writeHead(200,{
   "Content-Type":"text/html;charset=UTF-8",
   "Access-Control-Allow-Origin":"*",
   "Access-Control-Allow-Methods":"GET, POST, OPTIONS",
   "Access-Control-Allow-Headers":'X-Requested-With, Content-Type'
})
  • 3)jsonp
    方法:动态添加script标签,浏览器对script没有同源限制,引用script资源后立即执行,没有阻塞,类似于img标签(通常通过动态的方式获取其他的资源,获取的数据一般为json)
    缺点:无法发送post请求,只能get请求
    而且要确定jsonp的请求是否失败不容易,大多数框架的实现都是结合超时时间来确定。使用计时器在指定时间看是否能收到响应。
    用法:
<script>
function testjsonp(data){
  console.log(data.name)
}
</script>
<script>
   var sc=document.createElement('script');
   sc.type="text/javascript";
   sc.src="http://localhost:8888/jsonp?callback=testjsonp"
   document.head.appendChild(sc);
</script>

JSONP由2部分组成:回调函数和数据。
jsonp是在其他域中加载代码执行的,如果其他域不安全,响应中可能会夹杂一些恶意代码
(2)使用jquery封装jsonp

$.ajax({
   url:"http://localhost:8888/jsonp",
   type:'GET',
   dataType:'jsonp',// 返回的数据类型,设置为JSONP方式
   jsonp:'callback',//指定一个查询参数名称来覆盖默认的 jsonp 回调参数名 callback
   jsonpCallback:'handle',//设置回调函数名
   data:{},
   success:function(){}
})

(3)使用$.getJSON

$.getJSON("http://localhost:8888/jsonp&callback=?",function(data){
    console.log(data)
})

(4)iframe通过设置window.domain来实现主域名下不同子域名的跨域访问
(5)window.name,在一个窗口的生命周期内,所有载入的页面共享一个window.name,新载入的页面不会引起window的重置
(6)window.postMessage,可以向不同的窗口发送消息
(7)web socket,通过http建立连接,会将http协议替换为web socket协议

web安全攻击(XSS,CSRF,SQL注入,文件上传漏洞)

(1)XSS(跨站脚本攻击)原理及防范

xss是指攻击者往web页面里插入恶意html或js,
比如

  • 诱导用户打开一个恶意的链接, 窃取cookie中用户私密信息。
  • 在论坛添加一个恶意的表单,当用户提交表单的时候,却把信息传到攻击者的服务器中。
  • cookie劫持也是常见的xss攻击,cookie保存了当前用户的登录凭证,
    cookie劫持防御: 在set Cookie时加上HttpOnly标识,浏览器进制js访问带HttpOnly属性的cookie
response.setHeader('set-Cookie','cookiename=xx;path=/;Max-Age=seconds;HTTPOnly')
js是读取不了了,通过以下方式读取:
Cookie cookies[]=request.getCookies();

防范:
-1)输入检查:比如用户名,邮箱格式检查,,对特殊字符做编码或过滤。
- 1 ,js代码注入的时候,注意将标签关闭,将前端输入进行转义
- 2,append的利用:jq会将append元素转为fragment标签的时候找到script标签,再使用eval()执行一遍。
- 3,地址加转义字符:img标签的再次使用,加载失败时会调用该元素的onerror事件
危害:

  • 1,盗取用户的账号
  • 2 ,非法转账

(2) CSRF(跨域请求伪造)

原理:
网站的一些提交行为被黑客利用,你在访问黑客网站进行的一些操作会被操作到其他网站。
1,登录信任网站A:在本地生成cookie
2,在不登出A的情况下,访问危险网站B
防范
1,合理使用post,get
2, 通过验证码,除了用户,其他网站获取不到本次本次session的验证码。
3,使用token:随机生成一个token,在用户提交数据的时候也要携带token ,与服务器中的进行对比
4,referer检查:检查请求header中的referer
CSRF和XSS的区别
XSS是获取信息,不需要提前知道用户的代码和数据包
CSRF是代替用户完成指定的动作,需要知道其他用户的代码和数据包

(3)SQL注入

原理: 和xss类似,是由于将用户输入的数据当成命令来执行,

select * from user where username = 'leo' 
如果参数是:leo'; drop table user--, 则会误删除一个表
select * from user where username = 'leo'; drop table user--' 

SQL防御
使用预编译语句

(4)DoS攻击(Denial of Service拒绝服务)

原理:攻击者通过伪造ACKS数据包,希望服务器重传某些数据,攻击者利用TCP协议漏洞,发送大量半连接请求,耗费CPU和内存资源。
SYN Flooding攻击
原理:攻击者利用无效的IP地址,利用TCP连接的三次握手,连续发送会话请求,使主机一直处于会话请求中,直至连接超时,最终因耗费资源而停止。

(5)DNS欺骗

虚假的DNS服务在真实的DNS服务之前向客户端发送报文数据,两者的ID相同,所以会接收虚假报文,丢弃真实的报文,DNS ID序列号欺骗成功。
检测:
1)在限定的时间内如果收到两个或多个响应数据报文,则视为DNS欺骗
2)主动发送验证包检测是否有DNS欺骗
防御:
1)客户端直接使用IP地址访问重要的站点
2)对DNS服务和客户端的数据进行加密服务端可以使用SSH加密协议,客户端使用PGP软件。

猜你喜欢

转载自blog.csdn.net/lihuijuan_1/article/details/86592573