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 的攻击原理与防御


浏览器工作原理与实践


相关文章
|
21天前
|
SQL 负载均衡 安全
安全至上:Web应用防火墙技术深度剖析与实战
【10月更文挑战第29天】在数字化时代,Web应用防火墙(WAF)成为保护Web应用免受攻击的关键技术。本文深入解析WAF的工作原理和核心组件,如Envoy和Coraza,并提供实战指南,涵盖动态加载规则、集成威胁情报、高可用性配置等内容,帮助开发者和安全专家构建更安全的Web环境。
39 1
|
24天前
|
安全 前端开发 Java
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
63 4
|
23天前
|
安全 Go PHP
Web安全进阶:XSS与CSRF攻击防御策略深度解析
【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
50 2
|
25天前
|
存储 安全 Go
Web安全基础:防范XSS与CSRF攻击的方法
【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
58 3
|
27天前
|
SQL 安全 Go
PHP在Web开发中的安全实践与防范措施###
【10月更文挑战第22天】 本文深入探讨了PHP在Web开发中面临的主要安全挑战,包括SQL注入、XSS攻击、CSRF攻击及文件包含漏洞等,并详细阐述了针对这些风险的有效防范策略。通过具体案例分析,揭示了安全编码的重要性,以及如何结合PHP特性与最佳实践来加固Web应用的安全性。全文旨在为开发者提供实用的安全指南,帮助构建更加安全可靠的PHP Web应用。 ###
33 1
|
1月前
|
Kubernetes 安全 应用服务中间件
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
动态威胁场景下赋能企业安全,F5推出BIG-IP Next Web应用防火墙
48 3
|
1月前
|
缓存 安全 JavaScript
掌握JAMstack:构建更快、更安全的Web应用
JAMstack 是一种现代 Web 开发架构,结合 JavaScript、APIs 和 Markup,创建更快、更安全的 Web 应用。其核心优势包括高性能、安全性、可扩展性和易维护性。JAMstack 通过预构建静态页面和 API 实现高效渲染,利用静态站点生成器如 Gatsby 和 Next.js,并借助 CDN 和缓存策略提升全球访问速度。尽管面临复杂交互、SEO 和数据更新等挑战,但通过 Serverless Functions、预渲染和实时 API 更新等方案,这些挑战正逐步得到解决。
|
2月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
134 5
|
2月前
|
JSON 安全 JavaScript
Web安全-JQuery框架XSS漏洞浅析
Web安全-JQuery框架XSS漏洞浅析
439 2
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
70 5
下一篇
无影云桌面