假设您不希望其他网站在以下位置"构建"您的网站<iframe>:
<iframe src="http://example.org"></iframe>
Run Code Online (Sandbox Code Playgroud)
因此,您将反框架,帧破坏JavaScript插入到您的所有页面中:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
Run Code Online (Sandbox Code Playgroud)
优秀!现在你自动"破解"或突破任何包含iframe.除了一个小问题.
事实证明,您的帧破坏代码可能被破坏,如下所示:
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
Run Code Online (Sandbox Code Playgroud)
此代码执行以下操作:
window.onbeforeunload事件处理程序离开当前页面时,都会递增计数器setInterval()如果它看到计数器递增,则将当前位置更改为攻击者控制的服务器我的问题是 - 这更像是一个JavaScript拼图,而不是一个实际的问题 - 你怎么能打败破坏框架的破坏者呢?
我有一些想法,但在我的测试中没有任何效果:
onbeforeunload事件onbeforeunload = null …我希望用户能够将其网站网址输入到Chrome扩展程序中的输入框中,Chrome扩展程序将使用AJAX请求或其他类似内容来检测并告知用户URL后面的服务器是否支持发送响应通过HTTP2.这可能吗?
也许WebRequest有办法获取这些信息?还是新的Fetch API?你的请求能否以某种方式告诉服务器只能理解HTTP2回复?我看不出明显的方式.
我知道你可以使用window.chrome.loadTimes().connectionInfo获取当前页面的协议,但这需要加载我不想做的整个页面.
示例URLS:
通过HTTP2发送:https://cdn.sstatic.net/
通过HTTP 1.1提供:https://stackoverflow.com/
我尝试使用 React js 开发我的第一个 Chrome 扩展。当我尝试使用 chrome.webRequest API 阻止 chrome 扩展中的 URL 时,错误页面显示两个错误。
“webRequestBlocking”需要 2 或更低的清单版本。
未选中的runtime.lastError:您无权使用阻塞的webRequest侦听器。请务必在清单中声明 webRequestBlocking 权限。
我在清单文件中声明了“webRequestBlocking”权限。这是我的manifest.json
{
"manifest_version": 3,
"name": "Chrome Extension",
"description": "First Extension",
"options_page": "options.html",
"background": {
"service_worker": "background.bundle.js",
"matches": [
"<all_urls>"
]
},
"action": {
"default_title": "Open Extension",
"default_icon": "icon-34.png"
},
"icons": {
"128": "icon-128.png"
},
"content_scripts": [
{
"matches": [
"http://*/*",
"https://*/*",
"<all_urls>"
],
"js": [
"contentScript.bundle.js"
],
"css": [
"content.styles.css"
]
}
],
"devtools_page": "devtools.html",
"web_accessible_resources": [
{
"resources": [
"content.styles.css", …Run Code Online (Sandbox Code Playgroud) Google Chrome 扩展程序是否有一种干净的方法将非本地网页设置为新标签页,同时保持多功能框清除或突出显示?
扩展清单中的chrome_url_overrides.newtab 选项仅允许本地 HTML 页面。
现在,我看到两个选择:
理想的解决方案将使网页保持在新标签页的顶部框架,并且多功能框将被清除或突出显示。
附加信息:
chrome.tabs.update重定向新标签页历史上已突出显示 URL。然而,这似乎没有记录且不可靠。高亮显示在 Chrome 34 中被破坏,现在似乎在 Chrome 61 中被破坏(我刚刚报告的一个错误)。由于页面的复杂性,我正在尝试编写一个扩展,该扩展刮取需要作为网页加载的网站(XHR并不是真正的选择)。我想出的最好的解决方案是通过放置在background.html中的iframe进行抓取。当满足目标页面上的某些条件时,该扩展将向用户提供通知。
几年前在这里发布了一个非常类似的问题:
我可以通过删除x-frame-options标头在后台页面中将iframe与目标页面一起加载,如对上述问题的回答所示。当页面加载到浏览器选项卡/窗口中时,我可以通过内容脚本抓取数据。但是,我希望能够从后台脚本执行此操作,并且由于跨域安全性的原因,它当然不能直接访问iframe contentDocument。
不幸的是,尽管iframe很好地从目标页面加载了内容,但它没有加载内容脚本。似乎background.html根本没有加载任何内容脚本。这是有道理的,因为当扩展开始加载彼此的内容脚本时,事情可能会变得疯狂。
是否有清单选项允许特定的内容脚本在后台页面的iframe中运行?
如果不是,是否有任何方法可以放松扩展中访问iframe contentDocument的跨域安全性?
请注意,不能使用--disable-web-security chrome命令行开关。我希望非技术人员能够使用该扩展程序,并且我不想要求用户禁用网络安全性才能使用该扩展程序。
如果无法在后台页面中运行内容脚本或放松安全性,还有什么其他可能性可以在不使用XHR的情况下抓取带有chrome扩展名的页面DOM?当然一定有办法。
我正在制作一个 chrome 扩展,其中有一个 iframe。当扩展程序请求服务器以获取页面时,它会返回错误Refused to display 'https://subdomain.example.com/' in a frame because it set 'X-Frame-Options' to 'deny'。尽管我已在我的文件中设置了x-frame-optionsto并在后端项目的特定方法中添加了 a ,但它返回了另一个错误。我在我的文件中添加了和。不走运,它返回了,所以我删除了权限并添加了v3 的权限。没有结果!!然后我添加了deny.htaccessheader('x-frame-options: GOFORIT')Refused to display 'https://subdomain.example.com/' in a frame because it set multiple 'X-Frame-Options' headers with conflicting values ('GOFORIT, DENY'). Falling back to 'deny'webRequestwebRequestBlockingpermissionsmanifest.json'webRequestBlocking' requires manifest version of 2 or lowerUnchecked runtime.lastError: You do not have permission to use blocking webRequest listeners. Be sure to declare the webRequestBlocking permission …
javascript google-chrome google-chrome-extension x-frame-options chrome-extension-manifest-v3
在 Chrome 扩展中,我创建了选项卡属性,并尝试将其与每个选项卡一起存储。做这个的最好方式是什么?我研究过使用 localStorage,但似乎可能有一种更简单的方法。数据绝不是永久的,它仅在选项卡存在时就存在。
javascript ×5
iframe ×3
ajax ×1
chrome-extension-manifest-v3 ×1
framebusting ×1
html ×1
http2 ×1
reactjs ×1
webrequest ×1