禁用JavaScript/HTM页面中的ADO安全警告
Suppress ADO Security Warning in JavaScript/HTM Page
我有一个功能齐全的网站存储在一个网络驱动器与访问数据库,作为该网站的数据库。由于缺乏服务器端代码,我被迫使用JavaScript创建一个ADO ActiveX对象来连接到数据库。这工作。
我遇到的问题是,每当用户打开网站的ADO安全警告出现询问他们是否信任该网站。如果他们按"取消",抛出的错误是:Safety settings on this computer prohibit accessing a data source on another domain
,但是数据库存储在与站点相同的网络目录中…如果他们按"OK",网站就会打开。
有没有办法阻止这个警告的出现?
我知道这是一个老问题,但我有同样的问题,这让我发狂,有其他人也在SO没有答案-我发现了一些信息,应该帮助一些人,我有一个解决方案:
在网页上运行这段代码的问题是,它受到与该浏览器相关的安全控制的约束。如果网站用户使用不同的浏览器,他们可能不会得到同样的错误,如果我不得不猜测,他们可能会在IE中得到错误。在IE中,有一个名为"跨域访问数据源"的安全控制,位于Miscellaneous部分,如果你在Tools> Internet Options, security 选项卡下,选择适用于网站的区域(可能是Intranet,但这可以通过查看底部的IE状态栏来确认,当你在网站上时,查看正在应用的区域),并选择自定义级别。如果工作站由GPO管理—自定义级别显示为灰色,则问题就出现了。如果没有,您可以找到设置,选择在访问站点的适用客户机工作站上启用,然后完成。
如果它由GPO管理,并且您是能够进行此类更改的域管理员:
对于Active Directory用户&在客户端工作站的计算机上,您想让更改感觉,右键单击它并找到gpo &编辑。它位于:本地计算机策略>计算机配置>管理模板> Windows组件> Internet Explorer> Internet控制面板>安全页面> Intranet区域(可能)>第一个选项:跨域访问数据源。右键单击并选择编辑。选择Enabled单选按钮,然后在下拉框中选择Enabled。
选择应用和OK。
如果客户端工作站没有得到更新,要么重新启动,要么在命令行上执行gpupdate /force
来强制GPO更新并重新启动。
如果它是由GPO管理的,并且您不是能够进行此类更改的域管理员:
用VBScript代替。你可以用这个连接写一个单独的VBScript文件,你甚至可以从JavaScript调用它。下面是一个脚本,有一个ADO连接,我从https://gallery.technet.microsoft.com/scriptcenter/b160d928-fb9e-4c49-a194-f2e5a3e806ae作为一个例子,如何格式化它。当然,它是AD而不是Access,但是概念是一样的:
Option Explicit
Dim objGroup
'VERIFY A GROUP NAME WAS PASSED
If wscript.arguments.count <> 1 Then
wscript.echo "NO GROUP PASSED"
wscript.echo "Usage: scriptName <groupSamAccountName>"
wscript.quit
End If
'BIND TO THE GROUP
Set objGroup = getGroup(wscript.Arguments(0))
'ENUMERATE THE GROUPS MEMBERS
enumMembers objGroup, ""
Function getGroup(strGroupName)
Dim objConn, objRecSet, strQueryString, objRootDSE, strQueryFrom
Const adsOpenStatic = 3
Set objRootDSE = GetObject("LDAP://RootDSE")
strQueryFrom = "LDAP://" & objRootDSE.get("defaultNamingContext")
Set objConn = wscript.CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open
strQueryString = "SELECT AdsPath FROM '" & strQueryFrom & "' WHERE samAccountName = '" & strGroupName & "'"
Set objRecSet = wscript.CreateObject("ADODB.Recordset")
objRecSet.Open strQueryString, objConn, adsOpenStatic
If objRecSet.recordCount = 1 Then
Set getGroup = GetObject(objRecSet("AdsPath"))
Else
wscript.echo ucase(strGroupName) & " was not found in the domain. (" & objRootDSE.get("defaultNamingContext") & ")"
wscript.quit
End If
End Function
Sub enumMembers(byRef objGroup, strInheritedFrom)
Dim objMember
For Each objMember In objGroup.Members
If lcase(objMember.class) = "group" Then
enumMembers objMember, objMember.samAccountName
Else
If objMember.displayname <> "" Then
If strInheritedFrom = "" Then
wscript.echo objMember.displayname
Else
wscript.echo objMember.displayname & " (From NESTED GROUP: " & strInheritedFrom & ")"
End If
Else
If strInheritedFrom = "" Then
wscript.echo objMember.samAccountName
Else
wscript.echo objMember.samAccountName & " (From NESTED GROUP: " & strInheritedFrom & ")"
End If
End If
End If
Next
End Sub
在我的例子中,当我将这个块放入HTA(在浏览器中运行)并从按钮单击事件中使用特定组名运行getGroup()时,我得到了我的错误。我甚至没有试图从不同的域名获得一个组!没关系!所以我不得不把它拉到它自己的VBScript中,并自己运行它。我得到了输出并将其写入文件(通过存储对变量的响应,在每个结果之后使用& vbCrLf
进行换行,并从这里将其发送到代码:http://www.computerperformance.co.uk/vbscript/vbscript_file_opentextfile.htm)。我不会包括这段代码,因为它甚至更远的兔子洞和离题。但是,如果有必要,您可以将输出写入文件并将其读入,这是我的观点。你可能不需要。一旦将执行数据抓取的代码提取到它自己的进程中,就可能能够解决这个错误。但是,只要它与浏览器的安全设置绑定,它就会出现并成为一个问题,尽管,只要该设置保持禁用
我也有同样的问题,在互联网上到处搜索解决方案,大多数建议改变IE安全设置等,这并不真正起作用(尽管解决方案不断循环)。
这是一个复杂问题的简单解决方案。
Set objShell = CreateObject("Wscript.shell")
clicked = 1
Set connect = CreateObject("ADODB.Connection")
If clicked = 1 Then
objShell.SendKeys "{ENTER}"
clicked = 0
End If
- 如何在读取XLS/XLSX本地文件时,使用IE的javascript代码启用未标记为安全的ActiveX控件
- 使用javascript存储变量的最安全方式
- 是否存在React Native“;WEB代码安全防护”;
- 内容安全策略:页面's设置阻止加载资源
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 如何在Google chrome安全首选项文件中创建扩展安全哈希代码
- ES6 模板文字是否比 eval 更安全
- CORS保持在SecurityError上:操作不安全
- 旋转木马;启用内容安全策略时无法工作
- 从自己的安全系统中重新找回自己
- 关于ajax的安全问题
- 如何使用app和secret进行安全的解析初始化
- 是一个javascript bookmarklet,可以设置破坏跨域安全的域cookie
- Extjs、Chrome扩展和内容安全策略
- createObjectURL blob url在Firefox中不安全
- java安全doPrivileged方法如何阻止任意脚本
- addthis:addthis实用程序框架的JS安全错误
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- 禁用JavaScript/HTM页面中的ADO安全警告