WEB/系统安全

安全性相关的HTTP头部设置:
Strict-Transport-Security:强制使用安全连接(SSL/TLS之上的HTTPS)来连接到服务器。
X-Frame-Options:提供对于“点击劫持”的保护。
X-XSS-Protection:开启大多现代浏览器内建的对于跨站脚本攻击(XSS)的过滤功能。
X-Content-Type-Options: 防止浏览器使用MIME-sniffing来确定响应的类型,转而使用明确的content-type来确定。
Content-Security-Policy:防止受到跨站脚本攻击以及其他跨站注入攻击。
cookie属性的列表:
secure:仅在请求是通过HTTPS传输时,才传递cookie。
HttpOnly:将禁止javascript脚本获取到这个cookie,这可以用来帮助防止跨站脚本攻击。
domain:比较请求URL中服务端的域名,如果域名匹配成功,或这是其子域名,则继续检查path属性。
path:除了域名,cookie可用的URL路径也可以被指定。当域名和路径都匹配时,cookie才会随请求发送。
expires:设置持久化的cookie,当设置了它之后,cookie在指定的时间到达之前都不会过期。

CSRF:迫使用户在他们已登录的web应用中,执行一个并非他们原意的操作的攻击手段。这种攻击常常用于那些会改变用户的状态的请求,通常它们并不窃取数据,因为攻击者并不能看到响应的内容。

攻击原理:
用户C打开浏览器,访问受信任网站A,输入用户名和密码登录网站A。
在用户信息通过验证之后,网站A产生cookie信息并返回给浏览器,这时用户登录网站A成功,可以正常发送求请求到网站A。
用户未退出网站A之前,在同一浏览器中,打开一个页面访问网站B。
网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问网站A。
用户在接收到B返回的攻击性代码后,在不知情的情况下携带cookie信息,向网站A发送请求。而网站A不知道这个请求其实是B发的(误认为是用户发的),会根据用户C的cookie的信息以C的权限处理该请求,导致网站B的恶意代码被执行。

防御CSRF攻击
三种策略:验证HTTP Referer字段,在请求地址中添加token并验证,在http头中自定义属性并验证。

JSON/JSONP劫持
攻击者通过某些特定的手段,将本应该返回给用户的JSON数据进行拦截,转而将数据发送回给攻击者。
1.受攻击的网站URL返回一个JSON对象或者数组,并且返回的数据有重要的价值,也就是敏感的数据
2.受攻击的网站地址支持GET请求的响应(其实POST请求也可以做到JSON劫持,只不过需要对受害人进行诱导提及表单以发送POST请求,相比GET请求来说十分麻烦)
3.受害人的浏览器没有禁用javascript
4.受害人浏览了钓鱼/恶意网站,并且受害人在受攻击的网站中,保存在COOKIE中的身份验证信息尚未清除
5.受攻击的站点没有做相关的防御措施

钓鱼后,通过Object.prototype.__defineSetter__ 这个函数来触发攻击者自己的代码,或者是通过callback回调自己的代码

JSON/JSONP劫持属于CSRF的攻击范畴,所以解决的方法和解决CSRF的方法一样
1.验证HTTP Referer
2.请求中添加csrfToken,并在后端进行验证

基于DOM的跨站点脚本编制(XSS)
XSS(Cross Site Script):跨站点脚本编制,指的是攻击者向合法的web页面插入恶意的脚本代码(通常是是HTML代码和JS代码),然后提交给服务器,随即服务器响应页面(被植入的恶意脚本代码),攻击者可以利用这些恶意脚本代码进行会话挟持登攻击。例如:攻击者在论坛中放一个看似安全得连接,骗取用户点击之后,盗取cookies得用户隐私信息。
XSS通常被分为:反射型和持久型
反射型:恶意代码请求的数据在服务器中呈现为未编码和未过滤。
持久性:恶意代码请求的数据被保存在服务器中,每次用户访问这个页面时,恶意代码都会被执行。
第三类基于DOM的跨站点脚本编制不依赖服务器端的内容,比如HTML页面使用了document.location、document.URL、或者document.referer等DOM元素的属性,攻击者可以利用这些属性植入恶意脚本。

XSS防范方法
代码里对用户输入的地方需要仔细检查长度和对“<”“>”“,”“'”等字符串做过滤。
任何内容写到页面之前都必须加以encode,避免不小心把html tag弄出来。
避免直接在cookie中泄露用户隐私,例如email、密码等。
如果网站不需要在浏览器对cookie进行操作,可以在set-cookie末尾加上HttpOnly来防止js代码直接获取cookie。
尽量采用post而不是get提交表单。

XXE:利用程序解析XML时加载外部实体进行攻击。
攻击原理:XML规则允许通过DTD来定义存在什么标签,拥有什么属性,包含什么元素等,而这个实体的标识符又可以访问本地或者远程内容来加载到程序。当允许引用外部实体时,而XML数据又是来自外部输入,通过构造恶意内容,就可能导致任意文件读取、系统命令执行、内网端口探测、攻击内网网站等。

XXE防范方法
1.禁止外部实体或不允许XML中含有任何自己声明的DTD。
2.不使用外部输入数据。
3.过滤掉外部输入的XML数据中的关键词,如DOCTYPE、ENTITY、SYSTEM、PUBLIC等。

基于URL的重定向
指的是web页面会采用HTTP参数来保存URL,且web页面的脚本会将请求重定向到该保存的URL上,攻击者可以将HTTP中保存的URL改为恶意站点。

客户端JS Cookie引用
cookie由服务器创建,并存储在客户端浏览器,保存用户的身份识别、session信息、甚至授权信息等。
客户端js可以操作cookie数据,
如果在客户端使用JS创建或者修改站点的cookie,那么攻击者就可以查看这些代码,然后根据逻辑修改cookie。一旦cookie中边包含重要的信息,攻击者很容易利用这些漏洞进行特权升级等。

JS劫持
许多的应用程序利用JSON作为AJAX的数据传输机制,这通常会收到JS挟持攻击。
JSON实际就是一段JS代码,通常是数组格式,
攻击者在其恶意站点的网页中通过

你可能感兴趣的:(安全)