网站安全的基础有三块:
(1) 防范中间人攻击 (TLS mim, man in the middle)
当主机A、和机B通信时,都由主机C来为其“转发”,而A、B之间并没有真正意思上的直接通信,他们之间的信息传递同C作为中介来完成,但是A、B却不会意识到,而以为它们之间是在直接通信。这样攻击主机在中间成为了一个转发器,C可以不仅窃听A、B的通信还可以对信息进行篡改再传给对方,C便可以将恶意信息传递给A、B以达到自己的目的。
防范的方法是: 必须对认证过程的传输者认证过程的本身真实性进行认证。例如使用非对称加密的比较权威的TLS证书搭建HTTPS网站。
(2) 跨站脚本攻击。防范XSS跨站脚本(Cross-site scripting。攻击者盗用用户身份来做事。[盗用身份之后可以做很多事]
XSS其实就是Html的注入问题,攻击者的输入没有经过严格的控制进入了数据库,最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行Html代码。
数据流程为:攻击者的Html输入—>web程序—>进入数据库—>web程序—>用户浏览器。
跨站脚本,顾名思义,更多的情况下是注入一些js代码,实现站点影响或窃取用户信息等目的。
a. 盗用 cookie ,获取敏感信息。
b.利用植入 Flash ,通过 crossdomain 权限设置进一步获取更高权限;或者利用Java等得到类似的操作。
c.利用 iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。
d.利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。
e.在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
防范的方法:
1.永远不相信用户的输入。需要对用户的输入进行处理,只允许输入合法的值,其它值一概过滤掉。(某些情况下,我们不能对用户数据进行严格的过滤,那我们也需要对标签进行转换。)
2.HttpOnly防止劫取Cookie
HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。
目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。
(3) 跨站请求伪造。防范CSRF。 攻击者利用用户的手来做事。[借用户的手来做事,做的事有局限性]
CSRF 顾名思义,是伪造请求,冒充用户在站内的正常操作。我们知道,绝大多数网站是通过 cookie 等方式辨识用户身份(包括使用服务器端 Session 的网站,因为 Session ID 也是大多保存在 cookie 里面的),再予以授权的。所以要伪造用户的正常操作,最好的方法是通过 XSS 或链接欺骗等途径,让用户在本机(即拥有身份 cookie 的浏览器端)发起用户所不知道的请求。
CSRF攻击依赖下面的假定:
攻击者了解受害者所在的站点(知道要攻击的地址)
攻击者的目标站点具有持久化授权cookie或者受害者具有当前会话cookie 目标站点没有对用户在网站行为的第二授权
CSRF攻击的主要目的是让用户在不知情的情况下攻击自己已登录的一个系统,类似于钓鱼。如用户当前已经登录了邮箱,或bbs,同时用户又在使用另外一个,已经被你控制的站点,我们姑且叫它钓鱼网站。这个网站上面可能因为某个图片吸引你,你去点击一下,此时可能就会触发一个js的点击事件,构造一个bbs发帖的请求,去往你的bbs发帖,由于当前你的浏览器状态已经是登陆状态,所以session登陆cookie信息都会跟正常的请求一样,纯天然的利用当前的登陆状态,让用户在不知情的情况下,帮你发帖或干其他事情。
CSRF成功的前提用户必须登录到目标站点,且用户浏览了攻击者控制的站点。
与XSS最为不同一点是CSRF可以不用JS就能达到目的(GET和POST的区别)。
而且攻击者仅仅只需要给目标站一个请求就能成功。如0X01所说请求可以绕过同源策略。
还有一个天然条件是浏览器的安全缺陷:
浏览器在最初加入Cookie功能时并没有考虑安全因素。假设一个网站使用了Cookie,当一个用户完成身份验证之后.浏览器得到一个标识用户身份的Cookie,只要不退出或关闭浏览器。以后访问相同网站下的页面的时候,对每一个请求浏览器都会“智能”地主动附带上该网站的Cookie来标识自己,用户不需要重新认证就可以被网站识别。当第三方WEB页面产生了指向当前网站域下的请求时,该请求也会带上当前网站的Cookie。这种认证方式,称之为隐式认证。
除了Cookie认证方式之外,其他Web认证机制也面临同样的问题。比如HTTP基本认证,用户通过认证后。浏览器仍会“智能”地把用户名和口令附加到之后第三方发给站点的请求中。即使网站使用了安全套接字(SSL)来加密连接.浏览器也会”智能“地自动把SSL认证信息加到第三方发给站点的请求中。
防范:页面表单加入Html.AntiForgeryToken(),对应的提交的Action添加
[HttpPost] [ValidateAntiForgeryToken]
原文地址:https://www.cnblogs.com/wtujvk/p/9417271.html