我在ASP.NET中构建了一个SSO登录页面,我在其中对用户进行身份验证,然后将其传递到另一个系统。由于未知原因,此其他系统要求Chrome使用交换机运行--allow-running-insecure-content,以便某些外部设备可以与其网站一起运行。
我的客户希望确保当前的Chrome浏览器实例正在使用此标记/开关集运行,如果没有显示错误/警告消息。
有没有办法从ASP.NET中检测Chrome本身?或者,也许是一种模拟加载需要设置开关的资源的方法,然后检测是否加载了该资源?
答案 0 :(得分:1)
是的,客户端有一种方法可以检测Chrome是否与--allow-running-insecure-content
一起运行。
诀窍是向网页添加不安全的资源,然后检查是否使用JavaScript加载了该资源。使用其常规安全参数,Chrome不会从安全上下文中加载不安全的资源。
以下是一些示例代码:
<强> HTML:强>
<!-- When Chrome is run in insecure mode, as desired, this message will be removed -->
<div class="not-insecure-warning">
Your browser is not configured properly. You must access this page with Chrome using <code>--allow-running-insecure-content</code>. <a href="#">Learn more.</a>
</div>
<强> JavaScript的:强>
// Remove `.not-insecure-warning` elements
function removeNotInsecureWarning(){
var warnings = document.getElementsByClassName('not-insecure-warning');
for(var i = 0; i < warnings.length; i++){
var warning = warnings[i];
warning.parentNode.removeChild(warning);
}
}
var insecureScript = document.createElement('script');
// TODO: Replace URL to an empty `.js` file served over HTTP
insecureScript.src = 'http://code.jquery.com/jquery-3.2.1.js';
// If this insecure script loads, then the browser is running in insecure mode, remove the warning
insecureScript.addEventListener('load', removeNotInsecureWarning);
document.body.append(insecureScript);
See this example on JSFiddle.如果您正常运行Chrome,则会看到警告,但如果您打开一个允许不安全内容的新窗口,此页面上的警告将会消失。
如果您需要将此信息传递给服务器端逻辑,您可以:
insecureScript.addEventListener('error', isSecureSendPOSTRequest);
XMLHttpRequest
<input name="is_insecure" type="hidden" value="0">
。您可以使用上面显示的相同类型的客户端逻辑切换此输入的value
。答案 1 :(得分:-1)
我不知道直接解决方案,但可能的解决方案是您可以使用c#中的shell脚本打开chrome,如下所示。
class Module1 {
static void Main() {
System.Diagnostics.Process.Start("chrome.exe", "--allow-running-insecure-content");
}
}
如果您想添加--allow-running-insecure-content
以使用该标志加载浏览器