web安全

简介: web安全

同源策略


如果两个 URL 的协议、域名和端口都相同,我们就称这两个 URL 同源。


  • 可以相互访问资源。


  • 操作 DOM。在另一个页面中操作这一个页面的dom。


同源策略主要表现在 DOM、Web 数据和网络这三个层面。


  • dom层面。同源的页面,可以相互操作dom。


  • 数据层面。同源策略限制了不同源的站点读取当前站点的 Cookie、IndexDB、LocalStorage 等数据。


  • 网络层面。同源策略限制了通过 XMLHttpRequest 等方式将站点的数据发送给不同源的站点。


如果让不同源的资源绝对隔离,那么一定是最安全的,但是这样会使web项目难以开发。所以就需要做权衡。


在不同源的两个页面中,为了解决这两个问题。又引入了:


  • 跨域资源共享(CORS)。


  • 跨文档消息机制。window.postMessage。


  • 页面中可以引用第三方资源,不过这也暴露了很多诸如 XSS 的安全问题,因此又在这种开放的基础之上引入了 CSP 来限制其自由程度。


同源策略、CSP 和 CORS 之间的关系?


  • 因为有了同源策略的限制,在不同源的页面之间不能直接操作dom。但是可以通过window.postMessage操作。


  • 浏览器都是支持外部引用资源文件的,所以为了安全,浏览器中引入了内容安全策略,称为 CSP。CSP 的核心思想是让服务器决定浏览器能够加载哪些资源,让服务器决定浏览器是否能够执行内联 JavaScript 代码。


  • 为了可以在不同源的之间发送网络请求,引入了cors。


页面是可以自由引入第三方资源的,浏览器不会对其做限制,但是返回的html可以引入csp机制,即Content-Security-Policy header 头来告诉浏览器哪些js和图片资源可以加载执行,需要符合什么样的规则。


xss: 跨站脚本攻击


我们默认页面中可以引用任意第三方资源,然后又引入 CSP 策略来加以限制;默认 XMLHttpRequest 和 Fetch 不能跨站请求资源,然后又通过 CORS 策略来支持其跨域。

不过支持页面中的第三方资源引用和 CORS 也带来了很多安全问题,其中最典型的就是 XSS 攻击。


跨站脚本攻击是指通过存在安全漏洞的Web网站注册用户的浏览器内运行非法的HTML标签或JavaScript进行的一种攻击。


如果页面被注入了恶意 JavaScript 脚本,恶意脚本都能做哪些事情。


  • 可以窃取 Cookie 信息。恶意 JavaScript 可以通过“document.cookie”获取 Cookie 信息,然后通过 XMLHttpRequest 或者 Fetch 加上 CORS 功能将数据发送给恶意服务器;恶意服务器拿到用户的 Cookie 信息之后,就可以在其他电脑上模拟用户的登录,然后进行转账等操作。


  • 可以监听用户行为。 恶意 JavaScript 可以使用“addEventListener”接口来监听键盘事件,比如可以获取用户输入的信用卡等信息,将其发送到恶意服务器。黑客掌握了这些信息之后,又可以做很多违法的事情。


  • 可以通过修改 DOM 伪造假的登录窗口,用来欺骗用户输入用户名和密码等信息。


  • 还可以在页面内生成浮窗广告,这些广告会严重地影响用户体验。


那些方式可以注入非法的js脚本呢?


存储型 XSS 攻击、反射型 XSS 攻击和基于 DOM 的 XSS 攻击三种方式来注入恶意脚本。


反射型


在url中存放恶意代码。然后服务器获取到恶意代码,将其渲染在页面中,用户访问页面,他将被执行。


Web 服务器不会存储反射型 XSS 攻击的恶意脚本,这是和存储型 XSS 攻击不同的地方。


存储型


将内容经正常功能提交进入数据库持久保存,当前端页面获得后端从数据库中读出的注入代码时,恰好将其渲染执行。


基于 DOM 的 XSS 攻击


在 Web 资源传输过程或者在用户使用页面的过程中修改 Web 页面的数据。


如何预防xss攻击呢?


存储型 XSS 攻击和反射型 XSS 攻击都是需要经过 Web 服务器来处理的,因此可以认为这两种类型的漏洞是服务端的安全漏洞。


而基于 DOM 的 XSS 攻击全部都是在浏览器端完成的,因此基于 DOM 的 XSS 攻击是属于前端的安全漏洞。


它们都有一个共同点,那就是首先往浏览器中注入恶意脚本,然后再通过恶意脚本将用户信息发送至黑客部署的恶意服务器上。


所以要阻止 XSS 攻击,我们可以通过阻止恶意 JavaScript 脚本的注入和恶意消息的发送来实现。


  • 服务器对输入脚本进行过滤或转码


  • 充分利用 CSP


  • 限制加载其他域下的资源文件,这样即使黑客插入了一个 JavaScript 文件,这个 JavaScript 文件也是无法被加载的;


  • 禁止向第三方域提交数据,这样用户数据也不会外泄;


  • 禁止执行内联脚本和未授权的脚本;


  • 还提供了上报机制,这样可以帮助我们尽快发现有哪些 XSS 攻击,以便尽快修复问题。


  • 使用 HttpOnly 属性。在浏览器端禁止获取cookie。


csrf:跨站请求伪造


CSRF 攻击就是诱导用户点击黑客连接,然后黑客在自己的站点设置相应网站的请求连接,利用了用户的登录状态,并通过第三方的站点来做一些坏事。


mdn上有一个很好的例子


网络异常,图片无法展示
|


和 XSS 不同的是,CSRF 攻击不需要将恶意代码注入用户的页面,仅仅是利用服务器的漏洞和用户的登录状态来实施攻击。


如何预防csrf攻击


发起 CSRF 攻击的三个必要条件:


  • 第一个,目标站点一定要有 CSRF 漏洞;


  • 第二个,用户要登录过目标站点,并且在浏览器上保持有该站点的登录状态;


  • 第三个,需要用户打开一个黑客的站点。 所以说对于 CSRF 攻击我们主要的防护手段是提升服务器的安全性


  • 充分利用好 Cookie 的 SameSite 属性。禁止用户通过连接跳转的方式发送cookie。完全禁止第三方 Cookie。


  • 验证请求的来源站点。 通过http请求头中的Origin 和 Referer。


Origin: 只显示请求的域名。Referer: 显示请求方的完整路径。从哪个页面链接过来的。

但在某些情况下如从https跳转到http,浏览器处于安全考虑,不会发送referer,服务器就无法进行referer验证了。


  • CSRF Token。 同一个浏览器打开两个相同页面,那么服务器为这两个页面生成的csrf token都是不同的。


由于CSRF的本质在于攻击者欺骗用户去访问自己设置的地址,所以如果要求在访问敏感数据请求时,要求用户浏览器提供不保存在cookie中,并且攻击者无法伪造的数据作为校验,那么攻击者就无法再执行CSRF攻击。这种数据通常是窗体中的一个数据项。服务器将其生成并附加在窗体中,其内容是一个伪随机数。当客户端通过窗体提交请求时,这个伪随机数也一并提交上去以供校验。正常的访问时,客户端浏览器能够正确得到并传回这个伪随机数,而通过CSRF传来的欺骗性攻击中,攻击者无从事先得知这个伪随机数的值,服务端就会因为校验token的值为空或者错误,拒绝这个可疑请求。


就是不适用cookie做身份认证。


SQL注入


就是利用输入的参数将查询结果永远为true。SQL注入的本质:数据和代码未分离,即数据当做了代码来执行。


SQL注入的必备条件: 1.可以控制输入的数据 2.服务器要执行的代码拼接了控制的数据


危害


  • 获取数据库信息


  • 管理员后台用户名和密码


  • 获取其他数据库敏感信息:用户名、密码、手机号码、身份证、银行卡信息……


  • 整个数据库:脱裤


  • 获取服务器权限


  • 植入Webshell,获取服务器后门


  • 读取服务器敏感文件


如何防御


  • 严格限制Web应用的数据库的操作权限,给此用户提供仅仅能够满足其工作的最低权限,从而最大限度的减少注入攻击对数据库的危害


  • 后端代码检查输入的数据是否符合预期,严格限制变量的类型,例如使用正则表达式进行一些匹配处理。


  • 对进入数据库的特殊字符(',",\,<,>,&,*,; 等)进行转义处理,或编码转换。基本上所有的后端语言都有对字符串进行转义处理的方法,比如 lodash 的 lodash._escapehtmlchar 库。


  • 所有的查询语句建议使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到 SQL 语句中,即不要直接拼接 SQL 语句。例如 Node.js 中的 mysqljs 库的 query 方法中的 ? 占位参数。


XST:跨站追踪攻击


XST 的全称是 Cross-Site Tracing,中文译作“跨站式追踪攻击”。具体而言,是客户端发 TRACE 请求至服务器,如果服务器按照标准实现了 TRACE 响应,则在 response body 里会返回此次请求的完整头信息。通过这种方式,客户端可以获取某些敏感的 header 字段,例如 httpOnly 的 Cookie 等。


首先你需要了解一下trace请求的作用是什么?


显示出请求-响应的传输路径。多用于http链路的测试或者诊断。


XST 攻击的条件:


  • 需要目标 Web 服务器允许接受 Trace、Track 方法的请求


  • 客户端可以发送 Trace 方法的请求。(如今浏览器环境下已经杜绝这种请求)。


前端 | XST 的攻击原理与防御


浏览器工作原理与实践


相关文章
|
1月前
|
SQL 安全 Java
理解Web安全:防止Java Web应用的安全漏洞
【4月更文挑战第3天】在互联网时代,Java Web应用面临严峻的安全挑战,包括注入攻击、XSS、CSRF等。为保护应用,需实施安全措施和最佳实践:如输入验证、输出编码、使用安全框架、防范CSRF、管理会话、加密数据、智能错误处理及定期安全审计。通过这些方法,可降低安全风险,但需持续关注安全趋势并适应新技术。
|
2月前
|
安全
网易web安全工程师进阶版课程
《Web安全工程师(进阶)》是由“ i春秋学院联合网易安全部”出品,资深讲师团队通过精炼的教学内容、丰富的实际场景及综合项目实战,帮助学员纵向提升技能,横向拓宽视野,牢靠掌握Web安全工程师核心知识,成为安全领域高精尖人才。 ## 学习地址
23 6
网易web安全工程师进阶版课程
|
5月前
|
安全 测试技术 网络安全
2022年中职“网络安全“江西省赛题—B-4:Web安全深入测试
2022年中职“网络安全“江西省赛题—B-4:Web安全深入测试
68 1
|
6月前
|
安全 前端开发 JavaScript
互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
互联网并发与安全系列教程(07) - 常见的Web安全漏洞(其它漏洞)
61 0
|
6月前
|
安全 NoSQL Java
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
72 0
|
1天前
|
XML 云安全 安全
了解常见的web漏洞-XXE漏洞,日常如何做好web安全
随着网络技术的不断发展,网站安全问题日益受到人们的关注。当前随着技术发展,网站存在一些常见的可能被攻击者利用的漏洞,而在众多网站安全漏洞中,XXE(XML External Entity)漏洞是一个不容忽视的问题。今天我们就来分享了解一下关于XXE漏洞的概念、原理以及日常上有哪些可以措施可以防护网站安全。
|
1月前
|
云安全 数据采集 安全
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
阿里云提供两种关键安全产品:Web应用防火墙和云防火墙。Web应用防火墙专注网站安全,防护Web攻击、CC攻击和Bot防御,具备流量管理、大数据防御能力和简易部署。云防火墙是SaaS化的网络边界防护,管理南北向和东西向流量,提供访问控制、入侵防御和流量可视化。两者结合可实现全面的网络和应用安全。
阿里云安全产品,Web应用防火墙与云防火墙产品各自作用简介
|
1月前
|
SQL 安全
CTF--Web安全--SQL注入之‘绕过方法’
CTF--Web安全--SQL注入之‘绕过方法’
|
1月前
|
SQL 安全 PHP
CTF--Web安全--SQL注入之Post-Union注入
CTF--Web安全--SQL注入之Post-Union注入
|
1月前
|
SQL 存储 安全
CTF--Web安全--SQL注入之报错注入
CTF--Web安全--SQL注入之报错注入