Open Hibop opened 6 years ago
使用HTTPS机制能对服务器和客户端的通信加密,即使是经由的代理服务器和通信网络,也无法查阅其通信内容。
HTTPS能对URI路径、查询字符串、协议首部和消息体(请求消息体和响应消息体)等几乎所有的交互数据完成加密。
使用浏览器访问API时的问题
Cookie常用来标记用户或授权会话。因此,如果Web应用的Cookie被窃取,可能导致授权用户的会话受到攻击 在Content-type首部中返回application/json。
Content-type: application/json 然而IE浏览器会无视Content-Type首部的内容,因为使用 Content Sniffering 功能,即通过实际的数据来推测数据格式。
为了防止浏览器因 Content Sniffering 功能将JSON当作HTML解释,首先要在浏览器设置X-Content-Type-Options首部,该首部IE8+中有实现
X-Content-Type-Options: nosniff 另一种防XSS威胁的对策,是让JSON字符串进行转义
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
XSRF是跨站点请求伪造(Cross Site Request Forgery)的缩写。就是通过跨站点发送伪造的请求,让服务器端执行用户意愿之外的处理。换言之,当用户访问怀有恶意的页面时,XSRF攻击会经由页面嵌入的链接Iframe元素、IMG元素、Javascript代码及表单等,向另一个截然不同的站点发送请求,执行用户意愿之外的操作。
如:向公告板任意发帖,攻击站点
首先要禁止通过GET方法来修改服务器端的数据,而要使用POST、PUT、DELETE等方法。
即使设置了不允许通过GET方法来修改服务器端数据,XSRF可以通过FORM元素使用POST方法来发起攻击。和 XMLHttpRequest 不同,FORM元素不受同源策略的影响。
防止XSRF攻击的最常用的方法是使用XSRF令牌,在发送源的正规表单里嵌入一个由被访问站点发现的一次性令牌,或者至少每个会话中嵌入一个独特的令牌,只要来自客户端的访问没有携带令牌,就一律拒绝。
另一种防范措施,如果Web API只存在由XMLHttpRequest或非浏览器客户端发起的访问,就要求客户端使用某种机制在请求中附加一个特殊的首部,如果请求消息中不存在这一特殊首部,就拒绝访问,比如检查广为人知的X-Requested-With首部,由于通过FORM元素使用POST方法发起的请求,无法在发起请求时添加私有的首部,因此可以防范通过表单发起的XSRF攻击,
指API返回的JSON数据被怀有恶意的第三方窃取
防止JSON劫持可以采取的以下方式
让JSON数据无法通过script元素读取 让浏览器准确识别JSON数据 让JSON数据不能按JavaScript解释,或者在执行时无法读取到数据
Http security
较深入的总结: 常见 Web 安全攻防总结
http://www.jsfuck.com/
https://alf.nu/alert1
总结 XSS 与 CSRF 两种跨站攻击
思路总结:
用HTTPS对HTTP通信实施加密
使用HTTPS机制能对服务器和客户端的通信加密,即使是经由的代理服务器和通信网络,也无法查阅其通信内容。
HTTPS能对URI路径、查询字符串、协议首部和消息体(请求消息体和响应消息体)等几乎所有的交互数据完成加密。
使用浏览器访问API时的问题
会话劫持 XSS
Cookie常用来标记用户或授权会话。因此,如果Web应用的Cookie被窃取,可能导致授权用户的会话受到攻击 在Content-type首部中返回application/json。
Content-type: application/json 然而IE浏览器会无视Content-Type首部的内容,因为使用 Content Sniffering 功能,即通过实际的数据来推测数据格式。
为了防止浏览器因 Content Sniffering 功能将JSON当作HTML解释,首先要在浏览器设置X-Content-Type-Options首部,该首部IE8+中有实现
X-Content-Type-Options: nosniff 另一种防XSS威胁的对策,是让JSON字符串进行转义
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly
XSRF
XSRF是跨站点请求伪造(Cross Site Request Forgery)的缩写。就是通过跨站点发送伪造的请求,让服务器端执行用户意愿之外的处理。换言之,当用户访问怀有恶意的页面时,XSRF攻击会经由页面嵌入的链接Iframe元素、IMG元素、Javascript代码及表单等,向另一个截然不同的站点发送请求,执行用户意愿之外的操作。
如:向公告板任意发帖,攻击站点
首先要禁止通过GET方法来修改服务器端的数据,而要使用POST、PUT、DELETE等方法。
即使设置了不允许通过GET方法来修改服务器端数据,XSRF可以通过FORM元素使用POST方法来发起攻击。和 XMLHttpRequest 不同,FORM元素不受同源策略的影响。
防止XSRF攻击的最常用的方法是使用XSRF令牌,在发送源的正规表单里嵌入一个由被访问站点发现的一次性令牌,或者至少每个会话中嵌入一个独特的令牌,只要来自客户端的访问没有携带令牌,就一律拒绝。
另一种防范措施,如果Web API只存在由XMLHttpRequest或非浏览器客户端发起的访问,就要求客户端使用某种机制在请求中附加一个特殊的首部,如果请求消息中不存在这一特殊首部,就拒绝访问,比如检查广为人知的X-Requested-With首部,由于通过FORM元素使用POST方法发起的请求,无法在发起请求时添加私有的首部,因此可以防范通过表单发起的XSRF攻击,
JSON劫持
指API返回的JSON数据被怀有恶意的第三方窃取
防止JSON劫持可以采取的以下方式
让JSON数据无法通过script元素读取 让浏览器准确识别JSON数据 让JSON数据不能按JavaScript解释,或者在执行时无法读取到数据
Http security
较深入的总结: 常见 Web 安全攻防总结