常见的 web 安全漏洞可以分为 客户端漏洞 和 服务端漏洞. 客户端漏洞包括 XSS、CSRF、点击劫持、URL跳转 等; 服务端漏洞包括 SQL注入、命令注入、文件操作类 等.
XSS漏洞
什么是 XSS漏洞:
XSS (Cross-Site Scripting),跨站脚本攻击,因为缩写和 CSS 重叠,所以只能叫 XSS。
跨站脚本攻击是指通过存在安全漏洞的 Web 网站注册用户的浏览器内运行非法的 HTML 标签或者 JavaScript 进行的一种攻击。
XSS 的危害:
- 利用虚假输入表单骗取用户个人信息
- 利用脚本窃取用户的 Cookie 值,被害者在不知情的情况下,帮助攻击者发送恶意请求
- 显示伪造的文章或图片
XSS 的原理:
XSS 的原理是恶意攻击者往 Web 页面里插入恶意可执行网页脚本代码,当用户浏览该页面时,嵌入其中 Web 里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或者其他侵犯用户安全隐私的目的。
XSS漏洞的分类:
xss 漏洞的分类可以分为 存储型、反射型 和 DOM 型, 具体参考下表:
XSS 类型 | 存储型 | 反射型 | DOM 型 |
---|---|---|---|
触发过程 | 1. 黑客构造 XSS 脚本 2. 正常用户访问携带 XSS 脚本的页面 | 正常用户访问携带 XSS 脚本的URL | 正常用户访问携带 XSS 脚本的URL |
数据存储 | 数据库 | URL | URL |
谁来输出 | 后端 web 应用程序 | 后端 web 应用程序 | 前端 JavaScript |
输出位置 | HTTP 响应中 | HTTP 响应中 | 动态构造的 DOM 节点 |
CSRF 漏洞
CSRF 是什么: 跨站请求伪造 ( Cross-site request forgery )
概念: 利用用户已登录的身份, 在用户毫不知情的情况下, 以用户的名义完成非法操作.
危害: 执行恶意操作 ( “被转账”、”被发垃圾评论” 等 ) 、制造蠕虫 ……
完成 CSRF 攻击必须要有三个条件:
- 用户已经登录了站点 A,并在本地记录了 cookie
- 在用户没有登出站点 A 的情况下(也就是 cookie 生效的情况下),访问了恶意攻击者提供的引诱危险站点 B(B 站点要求访问站点 A)
- 站点 A 没有做任何 CSRF 防御
点击劫持
定义: 通过覆盖不可见的框架误导受害者点击而造成的攻击行为。
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过 iframe
嵌套的方式嵌入自己的网页中,并将 iframe
设置为透明,在页面中透出一个按钮诱导用户点击。
URL跳转漏洞
定义: 借助未验证的 URL 跳转, 将应用程序引导到不安全的第三方区域, 从而导致的安全问题.
原理:黑客利用 URL
跳转漏洞来诱导安全意识低的用户点击,导致用户信息泄露或者资金的流失。其原理是黑客构建恶意链接(链接需要进行伪装,尽可能迷惑),发在 QQ 群或者是浏览量多的贴吧论坛中,安全意识低的用户点击后,经过服务器或者浏览器解析后,跳到恶意的网站中。
SQL注入
SQL 注入是一种常见的 Web 安全漏洞, 攻击者利用这个漏洞, 可以访问或者修改数据, 或者利用潜在的数据库漏洞进行攻击.
一次SQL注入的过程:
- 获取用户请求参数
- 拼接到代码当中
SQL
语句按照我们构造参数的语义执行成功
SQL注入的必备条件:
- 可以控制输入的数据
- 服务器要执行的代码拼接了控制的数据
SQL注入的本质
数据和代码未分离, 即数据当做了代码来执行.
SQL注入的危害:
- 获取数据库信息
- 管理员后台用户名和密码
- 获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息……
- 整个数据库:脱库
- 获取服务器权限
- 植入
Webshell
,获取服务器后门 - 读取服务器敏感文件
如何防御?
- 严格限制 Web 应用的数据库的操作权限
- 后端代码检查输入的数据是否符合预期
- 对进入数据库的特殊字符进行转义处理,或者编码转换
- 所有的查询语句建议使用数据库提供的参数化查询接口
参考链接: 常见六大 Web 安全攻防解析