study
study copied to clipboard
前端安全
XSS - Cross Site Script(跨站脚本)
非持久型
-
攻击方式
诱惑用户点击包含攻击脚本的链接
-
攻击场景
常见站点页面从 URL 查询或 hash 参数中取出内容,未做任何处理的情况下直接加入到页面内容,URL 中的查询或 hash 参数则可被注入 XSS 脚本。
-
防御方式
对非服务端获取的内容进行转义处理,比如 URL、form 表单等。
持久型
-
攻击方式
往站点数据库注入(保存)攻击脚本
-
攻击场景
常见类似百度贴吧这种交流型站点,用户输入的内容会被保存到数据库中,如果未对用户输入内容做安全处理,则攻击脚本则会被写入数据库,任何站点用户打开有攻击脚本内容的页面都会被攻击。
-
防御方式
不信任用户输入内容,前端把用户输入内容提交到后端、后端保存内容到数据库这两个阶段前后端都要对内容进行转义处理。按说后端从数据库取出的内容是可信内容,前端可以直接渲染到页面,但为了安全起见,渲染之前最好再做一层转义处理。
CSRF - Cross Site Request Forgery(跨站请求伪造)
-
攻击方式
诱导用户打开攻击者站点,攻击者站点使用
img
或script
这类带src
属性的标签向被攻击站点发送 GET 类型攻击请求,或使用form
表单自动提交发送 POST 请求等,这些请求会被附上当前用户的 cookie 信息。 -
攻击场景
简单描述就是攻击者在你安全站点身份信息可用的情况下诱导你打开攻击者站点,攻击者站点以你的身份向安全站点发送攻击请求。
如用户登录银行网站后未退出登录的情况下,被诱导打开攻击者站点,攻击者站点向银行站点发送攻击请求,如果银行网站服务未做安全防护,则会以当前用户身份执行攻击者请求。
-
防御方式
防御主要以后端为主,前端为辅。
- 规范接口请求,GET 请求只用来获取数据而不会操作数据,非 GET 请求中增加 token 认证。
- 必要的时候使用验证码机制,比如涉及用户财产类敏感操作。
- 对请求来源进行验证,比如请求头中的 Referer 和 Origin 字段,但某些老旧浏览器允许修改自定义这两个字段,所以不能完全可信。
- 前端如果 HTML
a
标签中有taget
属性并且值为_blank
时,必须再加上rel
属性并且值为noopener noreferrer
,防止被攻击者站点篡改为钓鱼站点欺骗用户。