Web安全
定义
黑客利用网站操作系统的漏洞和Web服务程序的SQL注入漏洞等得到Web服务器的控制权限,轻则篡改网页内容,重则窃取重要内部数据,更为严重的则是在网页中植入恶意代码,时的网站访问者受到侵害的行为。
分类
CSRF、SQL注入、XSS
Web中数据的传输
1、浏览器:浏览器即客户端,提供客户端和服务器端的数据信息交互。
2、传输协议:常见的传输协议有HTTP、TCP、WebSocket。
3、网络设备:路由器等
4、Server容器:即我们常说的后台,用来解析用户请求和脚本的请求,如Tomcat、Nginx
5、数据库:Server容器对数据进行操作:如读、写等。
Web中的漏洞在以上各个阶段均可能产生。
常见的漏洞
SQL注入
原理
利用后台中SQL语句的漏洞,对原有SQL进行篡改。
产生的条件是:进行SQL拼接。
- 想象中的SQL:
SELECT * FROM user WHERE admin = 'admin' AND password = 'password';
SQL语句中字段admin
和password
的值为用户传入进行拼接的。
如用户传入的admin为:admin' or 1 = 1 --
;密码随意
- 实际中的SQL:
SELECT * FROM user WHERE admin = 'admin' -- 'AND password = 'password';
--
表示SQL的注释,表示之后的内容无效。所以不需要用户名和密码就能登录成功。
危害
- 直接操作数据库,修改数据。
解决措施
- 对用户的权限进行限制。
- 对特殊的字符进行转义处理或编码转换,如
<
、>
、=
、%
等。
XSS(跨站脚本攻击)
定义
恶意攻击者往Web页面里面插入恶意script代码,当用户浏览该页面之时,嵌入其中Web里面的Script代码会执行,从而达到恶意攻击用户的目的。
相关知识点
- 同源策略【协议、域名、端口三者完全相同】
- Cookie、Session:身份认证的基本手段
- DOM树【攻击者构造DOM节点插入到DOM树中、攻击者利用DOM事件执行JavaScript脚本】
攻击手段
- 盗用Cookie,获取敏感信息
- 破坏正常的页面结构,插入恶意内容
- 实现DDOS攻击【分布式拒绝服务攻击】
原理
- 条件:攻击者、有漏洞的服务器、受害者
跨站脚本是在将数据输出到网页时存在的问题,导致恶意攻击者往Web页面插入恶意的HTML、JavaScript代码。
分类
- 反射型XSS攻击【非持久型】
发出请求时,XSS代码出现在URL中,作为输入提交到服务器端,服务器端解析后响应,XSS代码随响应内容一起传回给浏览器,最后浏览器解析执行XSS代码。
- 存储型XSS攻击 【持久型】
存储型XSS和反射型XSS的差别仅在于提交的代码会存储在服务器端(数据库、内存等),下次目标页面时不用在提交XSS代码。
解决方案
- 对用户输入特殊的字符进行转义或编码encode,如
<
、>
等。 - 过滤:移除用户上传的DOM属性;移除用户删除的Style节点、Script节点、Iframe节点。
- 尽量不要使用eval、document.createElement()等可执行字符串的方法
CSRF(跨站请求伪造)
相关知识点
- 同源策略【协议、域名、端口三者完全相同】
- Cookie、Session:身份认证的基本手段
原理
步骤一:用户已经成功登录到可信站点上,此时客户端已经有可信的Cookie。
步骤二:此时攻击者诱导用户点击看似无害的网站链接,攻击者可以用可信的Cookie向可信站点发起攻击。
CSRF的攻击方式
- GET请求
- POST请求
- 通过邮件系统进行攻击
- 登录CSRF攻击方式
解决方案
- GET请求不能进行修改操作。
【GET请求的攻击方式常见并且简单,所以GET请求只能读取数据】 - 检查HTTP头部Referer、Origin信息。【在后台获取到请求头中的Referer、Origin】
【Referer和Origin都表示页面的来源,Referer:协议+域名+端口+路径+参数;Origin:协议+域名+端口】 - 一次性令牌。【存放到DOM中】
- 验证码方式。
- 设置Cookie不随着跨域请求发送:设置为
samesite