html parser ---> css parser ---> js parser
html Decoding---> URL Decoding ---> js Decoding
XSS原称为CSS(Cross-Site Scripting),因为和层叠样式表(Cascading Style Sheets)重名,所以改称为XSS(X一般有未知的含义,还有扩展的含义)。XSS攻击涉及到三方:攻击者,用户,web server。用户是通过浏览器来访问web server上的网页,XSS攻击就是攻击者通过各种办法,在用户访问的网页中插入自己的脚本,让其在用户访问网页时在其浏览器中进行执行。攻击者通过插入的脚本的执行,来获得用户的信息,比如cookie,发送到攻击者自己的网站(跨站了)。所以称为跨站脚本攻击。XSS可以分为反射型XSS和持久性XSS,还有DOM Based XSS。(一句话,XSS就是在用户的浏览器中执行攻击者自己定制的脚本。)
XSS恶意代码存储在web server中,这样,每一个访问特定网页的用户,都会被攻击。
留言板功能:
内容直接读取并且反射展示在页面上
如:get请求的参数
可以当做反射型的一种
地址栏:location.hash document.write('xxx')
对用户输入没有严格控制而直接输出到页面
对非预期输入的信任
盗取各类用户账号
窃取数据
非法转账
挂马(恶意代码)....
xss盲打:盲打只是一种惯称的说法,就是不知道后台不知道有没有xss存在的情况下,不顾一切的输入xss代码在留言啊,feedback啊之类的地方,尽可能多的尝试xss的语句与语句的存在方式,就叫盲打(测试xss)
XSS蠕虫:是指一种具有自我传播能力的XSS攻击,杀伤力很大。引发XSS蠕虫的条件比较高,需要在用户之间发生交互行为的页面,这样才能形成有效的传播。一般要同时结合反射型XSS和存储型XSS
1、对输入(和URL参数)进行过滤,对输出进行编码
也就是对提交的所有内容进行过滤,对url中的参数进行过滤,过滤掉会导致脚本执行的相关内容;然后对动态输出到页面的内容进行html编码,使脚本无法在浏览器中执行。虽然对输入过滤可以被绕过,但是也还是会拦截很大一部分的XSS攻击。
2、对输入和URL参数进行过滤(白名单和黑名单)
3、对输出进行编码
在输出数据之前对潜在的威胁的字符进行编码、转义是防御XSS攻击十分有效的措施。如果使用好的话,理论上是可以防御住所有的XSS攻击的。
对所有要动态输出到页面的内容,通通进行相关的编码和转义。当然转义是按照其输出的上下文环境来决定如何转义的
CSRF(Cross-site request forgery),中文名称:跨站请求伪造;
HTML CSRF:通过html元素发起CSRF请求
JSON HiJacking:构造自定义的回调函数
Flash CSRF:通过flash来实现跨域请求
XSS: 利用对用户输入的不严谨然后执行js语句
CSRF:通过伪造受信任用户发送请求
攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账......造成的问题包括:个人隐私泄露以及财产安全
1、Cookie Hashing(所有表单都包含同一个伪随机值) 在表单里增加Hash值,以认证这确实是用户发送的请求 ---> 然后在服务器端进行Hash值验证
现在一般的CSRF防御也都在服务端进行!!!
2、One-Time Tokens(不同的表单包含一个不同的伪随机值)
3、总结:通过 referer【验证HTTP Referer】、token 【通过自定义token】或者 验证码 来检测用户提交。尽量不要在页面的链接中暴露用户隐私信息。对于用户修改删除等操作最好都使用post 操作 。避免全站通用的cookie,严格设置cookie的域!
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe 嵌套的方式嵌入自己的网页中,并将 iframe 设置为透明,在页面中透出一个按钮诱导用户点击。
X-FRAME-OPTIONS:X-FRAME-OPTIONS是一个 HTTP 响应头,在现代浏览器有一个很好的支持。这个 HTTP 响应头 就是为了防御用 iframe 嵌套的点击劫持攻击
<head>
<style id="click-event">
html {
display: none !important;
}
</style>
</head>
<body>
<script>
if (self == top) {
var style = document.getElementById('click-event')
document.body.removeChild(style)
} else {
top.location = self.location
}
</script>
</body>
当通过 iframe 的方式加载页面时,攻击者的网页直接不显示所有内容了
SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
Sign in to post a comment
Comment ( 0 )