XSS
XSS全称为 Cross Site Scripting ,中文叫做跨站点脚本攻击。
💡
Tips:跨站点的含义指的是,发起该攻击的攻击者不是在自己的站点上对用户发起的攻击,而是通过一些方式将脚本置入到目标站点发起的攻击,或者是利用目标站点自己的脚本攻击目标站点。
XSS攻击目的
最终目的一般是以被攻击用户的身份对目标站点发起敏感的请求,比如:以用户的身份发起银行转账。(还有可能利用目标站点用户来发起对目标站点的流量攻击、干扰用户操作)
常规可能有以下方式:
- 拿到用户的token或包含用户认证信息的cookie,将这些东西通过ajax发送到自己的服务器,在自己的服务器伪造请求发给目标站点的服务器。
- 在用户已经登录的目标站点的页面直接发起ajax请求,这种请求一般直接就是敏感的操作。
XSS攻击方式
- 利用目标站点的用户输入数据未验证的漏洞,将攻击脚本数据保存至目标站点的后端数据库。如:常规的论坛网站的富文本,攻击者通过在目标站点注册账号,并发布一些文章,这些文章常规是以富文本保存在数据库的,再由前端去解析这些富文本,攻击者的文章可能就被他置入了攻击脚本,只要站点用户点击进入他的文章浏览,攻击就成立了。
- 利用目标站点的url地址栏解析操作的漏洞,使用各种方式诱使目标站点用户点击可以发起攻击目标站点的链接。如:某网站有一个页面的实现是通过url地址栏带上操作参数和指令,在页面的自带脚本中去解析url地址的参数和指令发起合法的敏感请求,攻击者就利用这个漏洞,将编辑好的链接发布出去,如果用户在目标网站已经登录了,用户点击该链接就会被攻击。
- 直接篡改目标站点页面的内容置入攻击脚本。
1. 目标站点只使用http,没有使用https,那站点的内容就可能被中间人给篡改。
2. 目标站点的用户使用了恶意的浏览器,或者安装了一些恶意浏览器插件。
3. 目标站点用户的电脑本身有病毒。
XSS防御
- 后端服务器对所有的用户输入数据进行校验过滤,防止脚本保存到后端数据库。(可以只校验需要在页面解析渲染的数据,但是最后所有数据都校验,万一哪一天要将之前没有校验的数据放在前端页面来解析渲染又搞忘了之前没有做XSS脚本校验了,那不就出问题了)
- 页面不能做对地址栏的指令和入参解析然后发起敏感操作这种事,最多只能是查询请求的解析。
- 使用https防止中间人篡改页面。
- 用户发起的敏感操作要有校验步骤。如:输入手机短信验证码、输入用户密码、或者确认授权等操作。但是也要重点注意现在不能让用户在页面输入敏感信息了,比如输入用户密码和确认授权等操作就不能由页面来输入或确认,因为页面可能被置入了脚本,这已经是不可信任的客户端了,我们要让这种确认操作来自可信安全的客户端(如站点自己的App),让用户到这些可信安全的客户端去执行确认操作。手机短信验证码一般可以让用户直接在页面输入,因为这东西虽然敏感,但是只关联一次操作,用了就没了,就算被页面脚本获取到也是废数据。
- 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攻击方式
- 页面嵌入目标站点的表单请求,诱导用户填写信息并点击表单提交。
- 页面直接动态脚本执行目标站点的请求。(第一条和第二条其实底层的攻击原理基本相同,第一条的情况是恶意站点不知道某些需要填写的信息,然后就伪造成目标站点,让用户填写一些必要信息再让用户自己点击提交,如短信验证码等)
- html标签的属性请求,如img的src、script的src、video的src等。
💡
Tips:所有这些攻击方式都依赖于用户已经在目标站点登录,并且记录登录认证信息的会话cookie没有过期,依赖于浏览器请求目标站点时自动带上该站点的cookie的机制。
CSRF防御
- 服务器配置同源策略。
1. 一般浏览器发起跨域请求时会先发送一个options的请求来预检查服务器是否支持当前域的请求,如果不支持,就不会发送真正的请求,一定程度上能避免跨域请求,但是依赖于浏览器的实现,万一浏览器的预检机制有问题,可能导致请求成功,因为一般浏览器是一定支持丢弃跨域的请求的。所以get请求成功了,丢弃了就没问题,但是post、put、delete等请求成功了可能就会造成问题。 - 正向方式,引入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中的内容。比如:微博的帖子的点击引流。
防御措施
- 在页面的响应头中加上X-Frame-Options,值为拒绝或者同源。
- csp限制同源或者指定源。
安全防御方案总结
- 必须使用csrf-token,使用cookie存储,使用httponly和secure属性。
- 每个域名入口必须配置指定域能跨域,不能写通配符。
- 响应的html内容必须加上csp策略(响应头和meta标签形式均可),只允许本源或指定源,配置不允许内联脚本、内联css。
- 响应的html响应头必须加上X-Frame-Options,配置允许同源或者指定源。
- 所有请求必须在https下。
- 不允许页面脚本解析url地址与参数,并发起修改插入删除等操作的接口,只允许发起查询请求的接口。
- 后端针对入参做对应的xss过滤。
CSRF-TOKEN实施
- 通常登录认证页面由后端认证中心返回,页面中在登录表单项中要加上csrf-code隐藏项,登录提交操作要将csrf-code以表单参数的形式传到后端用于验证,防止csrf。
- 登录接口验证成功后session生成一个csrf-token,以cookie(httponly、secure)的形式响应给前端。会话cookie也要httponly和secure。
- 敏感操作(或者说修改删除新增的操作)要验证csrf-token。
- csrf-token要定期更新,更新方案可以为前端定期来请求更新csrf-token的接口,该接口当然同样要验证当前的csrf-token是否有效,如果前端异常没有及时来更新csrf-token,那就采用让用户下线的方式了(当然还可以考虑其他方式)。
学习网络安全技术的方法无非三种:
第一种是报网络安全专业,现在叫网络空间安全专业,主要专业课程:程序设计、计算机组成原理原理、数据结构、操作系统原理、数据库系统、 计算机网络、人工智能、自然语言处理、社会计算、网络安全法律法规、网络安全、内容安全、数字取证、机器学习,多媒体技术,信息检索、舆情分析等。
第二种是自学,就是在网上找资源、找教程,或者是想办法认识一-些大佬,抱紧大腿,不过这种方法很耗时间,而且学习没有规划,可能很长一段时间感觉自己没有进步,容易劝退。
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
第三种就是去找培训。
接下来,我会教你零基础入门快速入门上手网络安全。
网络安全入门到底是先学编程还是先学计算机基础?这是一个争议比较大的问题,有的人会建议先学编程,而有的人会建议先学计算机基础,其实这都是要学的。而且这些对学习网络安全来说非常重要。但是对于完全零基础的人来说又或者急于转行的人来说,学习编程或者计算机基础对他们来说都有一定的难度,并且花费时间太长。
第一阶段:基础准备 4周~6周
这个阶段是所有准备进入安全行业必学的部分,俗话说:基础不劳,地动山摇
第二阶段:web渗透
学习基础 时间:1周 ~ 2周:
① 了解基本概念:(SQL注入、XSS、上传、CSRF、一句话木马、等)为之后的WEB渗透测试打下基础。
② 查看一些论坛的一些Web渗透,学一学案例的思路,每一个站点都不一样,所以思路是主要的。
③ 学会提问的艺术,如果遇到不懂得要善于提问。
配置渗透环境 时间:3周 ~ 4周:
① 了解渗透测试常用的工具,例如(AWVS、SQLMAP、NMAP、BURP、中国菜刀等)。
② 下载这些工具无后门版本并且安装到计算机上。
③ 了解这些工具的使用场景,懂得基本的使用,推荐在Google上查找。
渗透实战操作 时间:约6周:
① 在网上搜索渗透实战案例,深入了解SQL注入、文件上传、解析漏洞等在实战中的使用。
② 自己搭建漏洞环境测试,推荐DWVA,SQLi-labs,Upload-labs,bWAPP。
③ 懂得渗透测试的阶段,每一个阶段需要做那些动作:例如PTES渗透测试执行标准。
④ 深入研究手工SQL注入,寻找绕过waf的方法,制作自己的脚本。
⑤ 研究文件上传的原理,如何进行截断、双重后缀欺骗(IIS、PHP)、解析漏洞利用(IIS、Nignix、Apache)等,参照:上传攻击框架。
⑥ 了解XSS形成原理和种类,在DWVA中进行实践,使用一个含有XSS漏洞的cms,安装安全狗等进行测试。
⑦ 了解一句话木马,并尝试编写过狗一句话。
⑧ 研究在Windows和Linux下的提升权限,Google关键词:提权
以上就是入门阶段
第三阶段:进阶
已经入门并且找到工作之后又该怎么进阶?详情看下图
给新手小白的入门建议:
新手入门学习最好还是从视频入手进行学习,视频的浅显易懂相比起晦涩的文字而言更容易吸收,这里我给大家准备了一套网络安全从入门到精通的视频学习资料包免费领取哦!
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!