一、XSS
XSS(Cross-Site Scripting),跨站脚本攻击,因为缩写和css重叠,所以只能叫XSS。跨站脚本攻击是指通过存在安全漏洞的web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。
跨站脚本攻击有可能造成一下影响:
1、利用虚假输入表单骗取用户个人信息。
2、利用脚本窃取用户的Cookie值,被害者在不知情的情况下,帮助攻击者发送恶意请求。
3、显示伪造的文章或图片。
XSS的原理是恶意攻击者往Web页面里插入恶意可执行网页脚本代码,当用户浏览该网页之时,嵌入其中Web里面的脚本代码会被执行,从而可以达到攻击者盗取用户信息或其他侵犯用户安全隐私的目的。
XSS的攻击方式千变万化,大致可以分为几种类型:
1、非持久型XSS(反射型XSS)
非持久性XSS漏洞,一般是通过给别人发送恶意脚本代码参数的URL,当URL地址被打开时,特有的恶意代码参数被HTML解析、执行。
2、持久型XSS(存储型XSS)
持久型XSS漏洞,一般存在于Form表单提交等交互功能,如文章留言,提交文本信息等,黑客利用的XSS漏洞,将内容正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时恰好将其渲染执行。
如何防御XSS
CSP:
CSP本质上就是建立白名单,开发者明确告诉浏览器哪些外部资源可以加载执行。我们只需要配置规则,如何拦截是由浏览器自己实现的。我们可以通过这种方式来尽量减少XSS攻击。
转义字符:
用户的输入永远不可信任,最普遍的做法就是转义输入输出的内容,对于引导、尖括号、斜杠进行转义。
HttpOnly Cookie:
这是预防xss攻击窃取用户cookie最有效的防御手段。web应用程序设置cookie时,将其属性设置为HttpOnly,就可以避免该网页的cookie被客户端恶意JavaScript窃取,保护用户cookie信息。
前后端对输入的内容进行校验,过滤。
二、CSRF:
CSRF(Cross Site Request Forgery),即跨站请求伪造,是一种常见的web攻击,它利用用户已登录的身份,在用户毫不知情的情况下,以用户的名义完成非法的操作。
CSRF攻击的原理:
如何防御:
防范csrf攻击可以遵循以下几种规则:
Get请求不对数据进行修改
不让第三方网站访问到用户Cookie
阻止第三方网站请求接口
请求时附带验证信息,比如验证码或Token
使用验证码,极验,就是在做一些重要操作时需要进行验证才能完成
具体方法:
SameSite
Referer Check
Anti CSRF Token
验证码
三、点击劫持
点击劫持是一种视觉欺骗的攻击手段。攻击者将需要攻击的网站通过iframe嵌套的方式嵌入自己的网页中,并将iframe设置为透明,在页面中透出一个按钮诱导用户点击。
3.1、点击劫持的特点
3.1.1、隐蔽性较高,骗取用户操作
3.1.2、UI覆盖攻击
3.1.3、利用iframe或者其他标签的属性
3.2、点击劫持的原理
用户在登录A网站的系统后,被攻击者诱惑打开网站,而第三方网站通过iframe引入了A网站的页面内容,用户在第三方网站中点击某个按钮(被装饰的按钮),实际上是点击了A网站的按钮。
3.3、如何防御
3.3.1、X-FRAME-OPTIONS
3.3.2、JavaScript防御
四、URL跳转漏洞
4.1、定义:借助未验证的url跳转,将应用程序引导到不安全的第三方区域,从而导致的安全问题。
4.2、URL跳转漏洞原理
黑客利用URL跳转漏洞来诱导安全意识低的用户点击,导致用户信息泄露或者资金的流失。其原理是黑客构建恶意链接(链接需要进行伪装,尽可能迷惑),发在QQ群或者是浏览量多的贴吧/论坛中。
安全意识低的用户点击后,经过服务区或者浏览器解析后,跳到恶意的网站中。
4.3、实现方式
Header跳转
JavaScript跳转
META标签跳转
4.4、如何防御
4.4.1、referer限制
如果确定传递url参数进入的来源,我们可以通过该方式实现安全限制,保证该URL的有效性,避免恶意用户自己生成跳转链接。
4.4.2、加入有效性验证Token
我们保证所有生成的链接都是来自于我们可信域的,通过在生成的链接里加入用户不可控的Token对生成的链接进行校验,可以避免用户生成自己的恶意链接从而被利用,但是如果功能本身要求比较开放,可能导致有一定的限制。
五、SQL注入
5.1、SQL注入是一种常见的Web安全漏洞,攻击者利用这个漏洞,可以访问或修改数据,或者利用潜在的数据库漏洞进行攻击。
5.2、SQL注入的必备条件
5.2.1、可以控制输入的数据
5.2.2、服务器要执行的代码拼接了控制的数据。
5.3、危害
获取数据库数据信息
管理员后台用户名和密码
获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息
整个数据库:脱裤
获取服务区权限
植入Webshell获取服务区后门
读取服务区敏感文件
5.4、如何防御
严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害
后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理。
对进入数据库的特殊字符(',",,<,>,&,*,; 等)进行转义处理,或编码转换。基本上所有的后端语言都有对字符串进行转义处理的方法,比如 lodash 的 lodash._escapehtmlchar 库。
所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query 方法中的 ? 占位参数。
六、OS命令注入攻击
6.1、OS命令注入和SQL注入差不多,只不过SQL注入是针对数据库的,而OS命令注入是针对操作系统的。OS命令注入攻击指通过Web应用,执行非法的操作系统命令达到攻击的目的。只要在能调用Shell函数的地方就有存在被攻击的风险。倘若调用Shell时存在疏漏,就可以执行插入的非法命令。
命令注入攻击可以向Shell发送命令,让Windows或Linux操作系统的命令行启动程序。也就是说,通过命令注入攻击可执行操作系统上安装着的各种程序。
6.2、如何防御
后端对前端提交内容进行规则限制(比如正则表达式)
在调用系统命令前对所有传入参数进行命令参数转义过过滤
不要直接拼接命令语句,借助一些工具做拼接、转义预处理,例如,node.js的shell-escape npm包
七、不受限制的文件上传
这是一种将恶意文件上传到服务器然后对系统执行的攻击方式。攻击可能包括:使文件系统或数据库超载,接管完整的系统,客户端攻击,将攻击转发到后端系统或进行简单的破坏。
八、欢迎交流指正