Web 安全知识扫盲
XSS
XSS (cross site scripting) 跨站脚本攻击,可以理解为网站会执行用户提交的内容。
类型:
- 反射型
恶意输入包含到链接中,通过服务端生成包含恶意代码的 HTML, 用户访问链接后执行恶意代码 - 存储型
用户输入存储到服务器中,其他用户可以看到这个输入。如果这个输入直接渲染,可能会执行恶意代码。 - DOM 型
和反射性类似,一般是通过链接输入获取参数然后写入到页面中,区别是服务端返回 HTML 是正常的,客户端后续执行生成了恶意代码。例如innerHTML
,eval
等操作。
出现原因:未对用户输入进行转义,直接展示用户的输入,导致执行用户输入的代码。常见于评论区,个人信息,私信等功能。可能造成其他用户的用户信息泄漏,危害极大。
如何防御:
- 对用户输入进行转义,过滤
- 使用 CSP ,进行脚本执行限制
- cookie 设置 HttpOnly, 禁止 JS 获取
- 避免直接拼接 HTML 的操作,或者直接设置 innerHTML
XSS 攻击本质上可以说是 HTML 注入,执行用户输入的内容
CSRF
CSRF(cross site request forgery) 跨站请求伪造,这类攻击一般是利用用户登录的状态,欺骗用户执行攻击者想要执行的操作。例如一个网站的删除用户的操作是一个 get 请求,攻击者得知了请求的具体格式后,伪造成图片发送给管理员,管理员在登录状态看到该图片就会执行删除用户的操作。银行转账也是同理。
如何防御:
- 重要的操作,状态的更改不能使用 get 请求.[POST 请求只是相对安全]
- 对重要操作进行多重验证,验证码
- 验证请求的 referr
- 设置 cookie same-site
- 自定义 header, 利用 header 设置 token 信息
- 服务端生成页面时 生成 csrf token, 用户提交表单时传入该 token ,然后通过 session 进行验证 token 是否合法,这样可以保证是用户从合法路径发送了请求
CSRF 本质是伪造身份,常常结合 XSS 一起进行攻击
SQL 注入
SQL 注入 是指数据库查询时通过前端传入的条件直接拼接查询语句,造成执行隐患的缺陷。 一般发生在 php 网站,现在已经很少出现了。
影响: 数据库被清空,脱库
防御: 不能直接通过字符串进行凭借,使用对应的方法来执行语句
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论