Open zxdfe opened 1 year ago
Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.
XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
对输入保持不可信。
存储型 (持久型)
反射型 (非持久型)
基于DOM型(本地XSS)
https://secure.wphackedhelp.com/blog/wordpress-xss-attack/
对输入过滤(过滤script标签)检查 不要相信用户的任何输入。
输出处理 (服务器的输出也可能会出现问题)
验证码:防止脚本冒充用户提交危险操作
HttpOnly防止窃取Cookie:
使用CSP(Content Security Policy):
https://juejin.cn/post/6844903685122703367#heading-18
Cross-site request forgery 跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求. 利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
一个典型的CSRF攻击有着如下的流程:
cookie一般用于保存信息,你向同一个服务器发请求时会带上浏览器保存的对于那个服务器的cookie,而不管你从哪个网站发请求
ps. http请求都会带着请求目标域下的cookie的。只要你向A网站发了请求,就会带上A网站的cookie。所以重要操作的请求,认证信息都是不能存放在cookie中的。
Cookie 是紧跟域名的。同一个域名下的所有请求,都会携带 Cookie
攻击者借助受害者的 Cookie 骗取服务器的信任,但并不能拿到 Cookie,也看不到 Cookie 的内容
https://github.com/dwqs/blog/issues/68
GET类型的CSRF利用非常简单,只需要一个HTTP请求
<img src="http://bank.example/withdraw?amount=10000&for=hacker" >
在受害者访问含有这个img的页面后,浏览器会自动向http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker发出一次HTTP请求。bank.example就会收到包含受害者登录信息的一次跨域请求。
http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker
这种类型的CSRF利用起来通常使用的是一个自动提交的表单
<form action="http://bank.example/withdraw" method=POST> <input type="hidden" name="account" value="xiaoming" /> <input type="hidden" name="amount" value="10000" /> <input type="hidden" name="for" value="hacker" /> </form> <script> document.forms[0].submit(); </script>
链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发
Set-Cookie: foo=1; Samesite=Strict Set-Cookie: bar=2; Samesite=Lax Set-Cookie: baz=3
XSS
Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击.
XSS 的本质是:恶意代码未经过滤,与网站正常的代码混在一起;浏览器无法分辨哪些脚本是可信的,导致恶意脚本被执行。
对输入保持不可信。
XSS分类
存储型 (持久型)
反射型 (非持久型)
基于DOM型(本地XSS)
https://secure.wphackedhelp.com/blog/wordpress-xss-attack/
XSS防御
对输入过滤(过滤script标签)检查 不要相信用户的任何输入。
输出处理 (服务器的输出也可能会出现问题)
验证码:防止脚本冒充用户提交危险操作
HttpOnly防止窃取Cookie:
使用CSP(Content Security Policy):
https://juejin.cn/post/6844903685122703367#heading-18
CSRF
Cross-site request forgery 跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求. 利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。
一个典型的CSRF攻击有着如下的流程:
cookie一般用于保存信息,你向同一个服务器发请求时会带上浏览器保存的对于那个服务器的cookie,而不管你从哪个网站发请求
ps. http请求都会带着请求目标域下的cookie的。只要你向A网站发了请求,就会带上A网站的cookie。所以重要操作的请求,认证信息都是不能存放在cookie中的。
Cookie 是紧跟域名的。同一个域名下的所有请求,都会携带 Cookie
攻击者借助受害者的 Cookie 骗取服务器的信任,但并不能拿到 Cookie,也看不到 Cookie 的内容
https://github.com/dwqs/blog/issues/68
常见的CSRF攻击类型
GET类型的CSRF利用非常简单,只需要一个HTTP请求
在受害者访问含有这个img的页面后,浏览器会自动向
http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker
发出一次HTTP请求。bank.example就会收到包含受害者登录信息的一次跨域请求。这种类型的CSRF利用起来通常使用的是一个自动提交的表单
链接类型的CSRF并不常见,比起其他两种用户打开页面就中招的情况,这种需要用户点击链接才会触发
CSRF防护