XSS、CSRF、点击劫持、web应用安全实施

XSS

XSS全称为 Cross Site Scripting ,中文叫做跨站点脚本攻击。

💡
Tips:跨站点的含义指的是,发起该攻击的攻击者不是在自己的站点上对用户发起的攻击,而是通过一些方式将脚本置入到目标站点发起的攻击,或者是利用目标站点自己的脚本攻击目标站点。

XSS攻击目的

最终目的一般是以被攻击用户的身份对目标站点发起敏感的请求,比如:以用户的身份发起银行转账。(还有可能利用目标站点用户来发起对目标站点的流量攻击、干扰用户操作)
常规可能有以下方式:

  1. 拿到用户的token或包含用户认证信息的cookie,将这些东西通过ajax发送到自己的服务器,在自己的服务器伪造请求发给目标站点的服务器。
  2. 在用户已经登录的目标站点的页面直接发起ajax请求,这种请求一般直接就是敏感的操作。
XSS攻击方式
  1. 利用目标站点的用户输入数据未验证的漏洞,将攻击脚本数据保存至目标站点的后端数据库。如:常规的论坛网站的富文本,攻击者通过在目标站点注册账号,并发布一些文章,这些文章常规是以富文本保存在数据库的,再由前端去解析这些富文本,攻击者的文章可能就被他置入了攻击脚本,只要站点用户点击进入他的文章浏览,攻击就成立了。
  2. 利用目标站点的url地址栏解析操作的漏洞,使用各种方式诱使目标站点用户点击可以发起攻击目标站点的链接。如:某网站有一个页面的实现是通过url地址栏带上操作参数和指令,在页面的自带脚本中去解析url地址的参数和指令发起合法的敏感请求,攻击者就利用这个漏洞,将编辑好的链接发布出去,如果用户在目标网站已经登录了,用户点击该链接就会被攻击。
  3. 直接篡改目标站点页面的内容置入攻击脚本。
    1. 目标站点只使用http,没有使用https,那站点的内容就可能被中间人给篡改。
      2. 目标站点的用户使用了恶意的浏览器,或者安装了一些恶意浏览器插件。
      3. 目标站点用户的电脑本身有病毒。
XSS防御
  1. 后端服务器对所有的用户输入数据进行校验过滤,防止脚本保存到后端数据库。(可以只校验需要在页面解析渲染的数据,但是最后所有数据都校验,万一哪一天要将之前没有校验的数据放在前端页面来解析渲染又搞忘了之前没有做XSS脚本校验了,那不就出问题了)
  2. 页面不能做对地址栏的指令和入参解析然后发起敏感操作这种事,最多只能是查询请求的解析。
  3. 使用https防止中间人篡改页面。
  4. 用户发起的敏感操作要有校验步骤。如:输入手机短信验证码、输入用户密码、或者确认授权等操作。但是也要重点注意现在不能让用户在页面输入敏感信息了,比如输入用户密码和确认授权等操作就不能由页面来输入或确认,因为页面可能被置入了脚本,这已经是不可信任的客户端了,我们要让这种确认操作来自可信安全的客户端(如站点自己的App),让用户到这些可信安全的客户端去执行确认操作。手机短信验证码一般可以让用户直接在页面输入,因为这东西虽然敏感,但是只关联一次操作,用了就没了,就算被页面脚本获取到也是废数据。
  5. http响应头中加上content-security-policy或者返回的html中加上。
    1. content-security-policy简称csp,csp策略可以配置哪些源的请求是被允许的,是否允许内联脚本、内联css等。

CSRF

csrf全称为 Cross-site request forgery ,中文叫做跨站点请求伪造

💡 Tips:csrf的跨站点的含义与xss的跨站点有所不同,是用户在恶意站点上浏览页面在无意识的情况下对目标站点发起了跨域攻击。

CSRF攻击目的

以用户的身份在用户无感知的情况下发起敏感的跨站请求,比如在csrf.com网站发起bank.com站点的转账请求。

💡
Tips:相对于xss不同之处是,请求操作是在恶意站点页面内发起的,且csrf不需要知道和获取用户的认证信息,是利用用户在目标站点已经登录的认证信息,以及利用浏览器的一些机制,比如目标站点已经登录的会话cookie,浏览器在对目标站点发起请求时会自动在请求中带上cookie。

CSRF攻击方式
  1. 页面嵌入目标站点的表单请求,诱导用户填写信息并点击表单提交。
  2. 页面直接动态脚本执行目标站点的请求。(第一条和第二条其实底层的攻击原理基本相同,第一条的情况是恶意站点不知道某些需要填写的信息,然后就伪造成目标站点,让用户填写一些必要信息再让用户自己点击提交,如短信验证码等)
  3. html标签的属性请求,如img的src、script的src、video的src等。

💡
Tips:所有这些攻击方式都依赖于用户已经在目标站点登录,并且记录登录认证信息的会话cookie没有过期,依赖于浏览器请求目标站点时自动带上该站点的cookie的机制。

CSRF防御
  1. 服务器配置同源策略。
    1. 一般浏览器发起跨域请求时会先发送一个options的请求来预检查服务器是否支持当前域的请求,如果不支持,就不会发送真正的请求,一定程度上能避免跨域请求,但是依赖于浏览器的实现,万一浏览器的预检机制有问题,可能导致请求成功,因为一般浏览器是一定支持丢弃跨域的请求的。所以get请求成功了,丢弃了就没问题,但是post、put、delete等请求成功了可能就会造成问题。
  2. 正向方式,引入csrf-token,在发起敏感请求的同时将csrf-token一起带过去,后端服务器验证session会话登录认证信息的同时还要验证csrf-token。
CSRF-TOKEN

虽然配置同源策略、csp等一定程序上都能防止csrf,但是crsf-token是一种正向的思考方式去做防止csrf这件事,所以要引入csrf-
token,其他的配置做辅助。
常规的web应用,我们都会以session的方式记录当前用户的当次会话,前端以cookie的形式存储,如果用户已经登录,本次会话就会关联上用户的认证信息(存储在服务端),如果没有做csrf的预防措施,就会被恶意网站利用浏览器在发起对应域的请求时会自动带上对应域的cookie的机制来伪造已经登录了的用户的请求。

CSRF-TOKEN存储方式与安全性分析
  • 放cookie里面
    • 优点:可以给cookie设置上httponly和secure属性,表示不能被脚本读取和只允许https的请求携带,这样可以避免xss脚本获取csrf-token和cookie在http上裸奔。
    • 缺点:同前面说的session一样了,是由浏览器的机制自动携带,如果没配置对同源策略等,还是会有csrf风险,就算配置了同源,如果同源的策略是允许当前域的子域访问的,但是子域允许了其他域的跨域,这样还是扩散了csrf风险。
  • 放页面中(表单中隐藏项)
    • 优点:没有cookie的自动携带缺点了。
    • 缺点:只要没有不允许读取,就有被xss脚本读取获取的风险
  • 放session storage中
    • 优点:没有cookie的自动携带缺点了。
    • 缺点:只要没有不允许读取,就有被xss脚本读取获取的风险。同时只存在于单个会话页面,如果用户退出浏览器页面或关闭页面重进就没办法满足保存用户登录状态的需求了。
  • 放local storage中
    • 优点: 没有cookie的自动携带缺点了。
    • 缺点:只要没有不允许读取,就有被xss脚本读取获取的风险。
总结

如果放cookie要配置上httponly和secure属性,这样就防止了xss,同时其他的同源策略要多多考虑。
如果选择其他方式,就要着重考虑防止xss。

点击劫持

点击劫持指的是你的站点被恶意站点以iframe的方式嵌入到它的页面中去了,并将其调整为透明的,其下面又包含一些诱导点击的东西诱导用户去点击那个东西,但是用户实际点击的是iframe中的内容。比如:微博的帖子的点击引流。

防御措施
  1. 在页面的响应头中加上X-Frame-Options,值为拒绝或者同源。
  2. csp限制同源或者指定源。

安全防御方案总结

  1. 必须使用csrf-token,使用cookie存储,使用httponly和secure属性。
  2. 每个域名入口必须配置指定域能跨域,不能写通配符。
  3. 响应的html内容必须加上csp策略(响应头和meta标签形式均可),只允许本源或指定源,配置不允许内联脚本、内联css。
  4. 响应的html响应头必须加上X-Frame-Options,配置允许同源或者指定源。
  5. 所有请求必须在https下。
  6. 不允许页面脚本解析url地址与参数,并发起修改插入删除等操作的接口,只允许发起查询请求的接口。
  7. 后端针对入参做对应的xss过滤。

CSRF-TOKEN实施

  1. 通常登录认证页面由后端认证中心返回,页面中在登录表单项中要加上csrf-code隐藏项,登录提交操作要将csrf-code以表单参数的形式传到后端用于验证,防止csrf。
  2. 登录接口验证成功后session生成一个csrf-token,以cookie(httponly、secure)的形式响应给前端。会话cookie也要httponly和secure。
  3. 敏感操作(或者说修改删除新增的操作)要验证csrf-token。
  4. csrf-token要定期更新,更新方案可以为前端定期来请求更新csrf-token的接口,该接口当然同样要验证当前的csrf-token是否有效,如果前端异常没有及时来更新csrf-token,那就采用让用户下线的方式了(当然还可以考虑其他方式)。

接下来我将给各位同学划分一张学习计划表!

学习计划

那么问题又来了,作为萌新小白,我应该先学什么,再学什么?
既然你都问的这么直白了,我就告诉你,零基础应该从什么开始学起:

阶段一:初级网络安全工程师

接下来我将给大家安排一个为期1个月的网络安全初级计划,当你学完后,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web渗透、安全服务、安全分析等岗位;其中,如果你等保模块学的好,还可以从事等保工程师。

综合薪资区间6k~15k

1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(1周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(1周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(1周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

那么,到此为止,已经耗时1个月左右。你已经成功成为了一名“脚本小子”。那么你还想接着往下探索吗?

阶段二:中级or高级网络安全工程师(看自己能力)

综合薪资区间15k~30k

7、脚本编程学习(4周)
在网络安全领域。是否具备编程能力是“脚本小子”和真正网络安全工程师的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力。

零基础入门的同学,我建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习
搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP,IDE强烈推荐Sublime;

Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,没必要看完

用Python编写漏洞的exp,然后写一个简单的网络爬虫

PHP基本语法学习并书写一个简单的博客系统

熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选)

了解Bootstrap的布局或者CSS。

阶段三:顶级网络安全工程师

学习资料分享

当然,只给予计划不给予学习资料的行为无异于耍流氓,这里给大家整理了一份【282G】的网络安全工程师从入门到精通的学习资料包,可点击下方二维码链接领取哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值