We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
XSS 就是Cross-Site Scripting(跨站脚本攻击),就是一种代码注入攻击 就是页面被注入了恶意的代码 攻击通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行,利用这些恶意脚本,攻击者可获取用户的明个信息如Cookie、SessionId等,进而危害数据安全
XSS本质:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。而由于直接在用户的终端执行,恶意代码能够直接获取用户信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。
判断一下,下面这两种说法是否正确:
"><script>alert('XSS')</script>"
解决方法:escapeHTML()将字符进行转义,这样恶意代码就不会被浏览器执行,且搜索词能完美的在页面显示出来
escapeHTML()
原理:
javascript:alert('XSS')
解决方法: 白名单 对应链接跳转,如<a href="xxx" />或location.href="xxx"时,要检验其内容,根据项目情况进行过滤,禁止“javascript:”链接,非法scheme等
<a href="xxx" />
location.href="xxx"
插入JSON的地方,不能使用escapeHTML(),因为转义后,JSON格式会被破坏
注意:
background-image:url("javascript:...")
expression(...)
根据攻击来源,可以分成3类:
恶意代码存在数据库里 常见于带有用户保存数据的网站功能,如论坛发帖,商品评论,用户私信等。
恶意代码存在URL里 常见于通过URL传递参数的功能,如网站搜索、跳转等
网站前端的JavaScript代码本身不够严谨,把不可信的代码当作代码执行了
在使用.innerHTML,.outerHTML,document.write()要特别小心,不要把不可信的数据作为HTML插到页面上,而应该尽量使用.textContent,.setAttribute()
.innerHTML
.outerHTML
document.write()
.textContent
.setAttribute()
和上面两种的XSS的区别:DOM型XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞;其他的属于服务端的安全漏洞
不对,因为DOM型XSS攻击不发生在后端,是前端的责任。防范XSS是需要前后端共同参与的系统工程;并且,转义应该在输入HTML时进行,而不是在提交用户提交的时候
不对,因为不同的上下文,所需要的的转义规则不一致,乱用反而更容易制造XSS攻击
CSRF (Cross-site request forgery)跨站请求伪造 攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对呗攻击的网站执行某项操作的目的
要求所有用户请求都要携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF攻击
流程:
这个方法,安全是非常安全的,但是工作量巨大,且可能有遗漏,因为不能在通用的拦截上统一拦截处理,需要每一个页面和接口都添加对应的输出和校验。
要求Ajax和表单请求携带一个Cookie中的值
The text was updated successfully, but these errors were encountered:
No branches or pull requests
HTTP相关 三.网络安全(XSS,CROS)
3.1 什么是跨域?
3.2 CROS预请求验证
3.3 XSS 和CROS跨域问题
3.4. 什么是内容安全策略(CSP:Content-Security-Policy)?
3.5 jsonp 的作用
3.6 fetch发送2次请求的原因?
3.7 Cookie如何防范XSS的攻击
XSS攻击
什么是XSS攻击
XSS 就是Cross-Site Scripting(跨站脚本攻击),就是一种代码注入攻击
就是页面被注入了恶意的代码
攻击通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行,利用这些恶意脚本,攻击者可获取用户的明个信息如Cookie、SessionId等,进而危害数据安全
XSS本质:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。而由于直接在用户的终端执行,恶意代码能够直接获取用户信息,或者利用这些信息冒充用户向网站发起攻击者定义的请求。
提出疑问
判断一下,下面这两种说法是否正确:
发生场景
"><script>alert('XSS')</script>"
,浏览器无法分辨出这个关键字是恶意代码,因而执行了脚本,然后就会弹出alert解决方法:
escapeHTML()
将字符进行转义,这样恶意代码就不会被浏览器执行,且搜索词能完美的在页面显示出来原理:
javascript:alert('XSS')
,虽然不会立刻弹出XSS,但是这个会解析成点击a标签,就弹出XSS解决方法: 白名单
对应链接跳转,如
<a href="xxx" />
或location.href="xxx"
时,要检验其内容,根据项目情况进行过滤,禁止“javascript:”链接,非法scheme等注意:
总结:XSS注入的方法
background-image:url("javascript:...")
的代码(新版本浏览器已经可以防范)expression(...)
的css表达式代码(新版本浏览器已经可以防范)用户可以通过哪种方式注入恶意脚本?
XSS分类
根据攻击来源,可以分成3类:
存储型
恶意代码存在数据库里
常见于带有用户保存数据的网站功能,如论坛发帖,商品评论,用户私信等。
反射型
恶意代码存在URL里
常见于通过URL传递参数的功能,如网站搜索、跳转等
DOM型
网站前端的JavaScript代码本身不够严谨,把不可信的代码当作代码执行了
在使用
.innerHTML
,.outerHTML
,document.write()
要特别小心,不要把不可信的数据作为HTML插到页面上,而应该尽量使用.textContent
,.setAttribute()
和上面两种的XSS的区别:DOM型XSS攻击中,取出和执行恶意代码由浏览器端完成,属于前端JavaScript自身的安全漏洞;其他的属于服务端的安全漏洞
XSS攻击的预防
可以在某些情况下解决特定的XSS问题,但会引起很大的不确定性和乱码问题,应该避免用此类方法
CSP的作用:
XSS的检测
回答疑问
判断一下,下面这两种说法是否正确:
不对,因为DOM型XSS攻击不发生在后端,是前端的责任。防范XSS是需要前后端共同参与的系统工程;并且,转义应该在输入HTML时进行,而不是在提交用户提交的时候
不对,因为不同的上下文,所需要的的转义规则不一致,乱用反而更容易制造XSS攻击
CSRF攻击
什么是CSRF攻击?
CSRF (Cross-site request forgery)跨站请求伪造
攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对呗攻击的网站执行某项操作的目的
攻击场景
攻击类型
CSRF的特点
防护策略
同源检测(CROS)
Samesite Cookie属性
CSRF Token
要求所有用户请求都要携带一个CSRF攻击者无法获取到的Token。服务器通过校验请求是否携带正确的Token,来把正常的请求和攻击的请求区分开,也可以防范CSRF攻击
流程:
验证Token:先解密Token,对比加密字符串以及时间戳,如果加密字符串一致,且时间未过期,那么这个Token就是有效的。
这个方法,安全是非常安全的,但是工作量巨大,且可能有遗漏,因为不能在通用的拦截上统一拦截处理,需要每一个页面和接口都添加对应的输出和校验。
双重Cookie验证
要求Ajax和表单请求携带一个Cookie中的值
The text was updated successfully, but these errors were encountered: