我们的一些客户提示说我们所有的 JSONP 端点都存在 XSS 漏洞,但我不同意它是否真的构成漏洞。想要获得社区的意见以确保我没有遗漏任何东西。
因此,与任何 jsonp 系统一样,我们有一个像这样的端点:
http://foo.com/jsonp?cb=callback123
其中 cb 参数的值在响应中重放:
callback123({"foo":"bar"});
客户提示我们没有在 CB 参数中过滤掉 HTML,所以他们会想出一个这样的例子:
http://foo.com/jsonp?cb=<body onload="alert('h4x0rd');"/><!--
显然,对于返回内容类型 text/html 的 URL,这会带来一个问题,即浏览器呈现该 HTML,然后在 onload 处理程序中执行潜在的恶意 javascript。可用于窃取 cookie 并将它们提交到攻击者的站点,甚至可以生成用于网络钓鱼的虚假登录屏幕。用户检查域并发现这是他信任的域,因此他继续并登录。
但是,在我们的例子中,我们将内容类型 header 设置为 application/javascript,这会在不同的浏览器中导致各种不同的行为。即 Firefox 只显示原始文本,而 IE 会打开一个“另存为...”对话框。我不认为其中任何一个特别容易被利用。 Firefox 用户不会阅读告诉他从桥上跳下来的恶意文本并多加考虑。 IE 用户可能会对另存为对话框和点击取消感到困惑。
我想我可以看到这样一种情况,即 IE 用户被诱骗保存和打开 .js 文件,然后该文件通过 Microsoft JScript 引擎并获得对用户机器的各种访问权限;但这似乎不太可能。这是这里最大的威胁还是我遗漏了其他一些漏洞?
(显然,我将通过过滤来“修复”以仅接受有效的 javascript 标识符,并有一些长度限制以防万一;但我只是想就我可能错过的其他威胁进行对话。 )
最佳答案
他们的注入(inject)必须类似于 </script><h1>pwned</h1>
验证 $_GET['callback'] 对您来说相对简单(假设是 PHP)是一个有效的 JavaScript 函数名。
JSONP 的全部意义在于绕过试图防止 XSS 类型漏洞的浏览器限制,因此在某种程度上需要 JSONP 提供者和请求站点之间的信任。
但是,只有当客户端没有巧妙地处理用户输入时,该漏洞才会出现 - 如果他们硬编码所有 JSONP 回调名称,那么就没有潜在的漏洞。
关于javascript - 明显的jsonp xss漏洞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8750469/
目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控
假设我在Store的模型中有这个非常简单的方法:defgeocode_addressloc=Store.geocode(address)self.lat=loc.latself.lng=loc.lngend如果我想编写一些不受地理编码服务影响的测试脚本,这些脚本可能已关闭、有限制或取决于我的互联网连接,我该如何模拟地理编码服务?如果我可以将地理编码对象传递到该方法中,那将很容易,但我不知道在这种情况下该怎么做。谢谢!特里斯坦 最佳答案 使用内置模拟和stub的rspecs,你可以做这样的事情:setupdo@subject=MyCl
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我的rails3.1.6应用程序中有一个自定义访问器方法,它为一个属性分配一个值,即使该值不存在。my_attr属性是一个序列化的哈希,除非为空白,否则应与给定值合并指定了值,在这种情况下,它将当前值设置为空值。(添加了检查以确保值是它们应该的值,但为简洁起见被删除,因为它们不是我的问题的一部分。)我的setter定义为:defmy_attr=(new_val)cur_val=read_attribute(:my_attr)#storecurrentvalue#makesureweareworkingwithahash,andresetvalueifablankvalueisgiven
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
什么是0day漏洞?0day漏洞,是指已经被发现,但是还未被公开,同时官方还没有相关补丁的漏洞;通俗的讲,就是除了黑客,没人知道他的存在,其往往具有很大的突发性、破坏性、致命性。0day漏洞之所以称为0day,正是因为其补丁永远晚于攻击。所以攻击者利用0day漏洞攻击的成功率极高,往往可以达到目的并全身而退,而防守方却一无所知,只有在漏洞公布之后,才后知后觉,却为时已晚。“后知后觉、反应迟钝”就是当前安全防护面对0day攻击的真实写照!为了方便大家理解,中科三方为大家梳理当前安全防护模式下,一个漏洞从发现到解决的三个时间节点:T0:此时漏洞即0day漏洞,是已经被发现,还未被公开,官方还没有相
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如
出于某种原因,我必须为Firefox禁用javascript(手动,我们按照提到的步骤执行http://support.mozilla.org/en-US/kb/javascript-settings-for-interactive-web-pages#w_enabling-and-disabling-javascript)。使用Ruby的SeleniumWebDriver如何实现这一点? 最佳答案 是的,这是可能的。而是另一种方式。您首先需要查看链接Selenium::WebDriver::Firefox::Profile#[]=
我是Ruby和Watir-Webdriver的新手。我有一套用VBScript编写的站点自动化程序,我想将其转换为Ruby/Watir,因为我现在必须支持Firefox。我发现我真的很喜欢Ruby,而且我正在研究Watir,但我已经花了一周时间试图让Webdriver显示我的登录屏幕。该站点以带有“我同意”区域的“警告屏幕”开头。用户点击我同意并显示登录屏幕。我需要单击该区域以显示登录屏幕(这是同一页面,实际上是一个表单,只是隐藏了)。我整天都在用VBScript这样做:objExplorer.Document.GetElementsByTagName("area")(0).click