![可能的 SQL 注入](https://linux22.com/image/1332033/%E5%8F%AF%E8%83%BD%E7%9A%84%20SQL%20%E6%B3%A8%E5%85%A5.png)
我有一个基于 SQL 2005 构建的桌面软件。SQL 服务器托管在我的办公室内,并且有 1 个面向公众的网站显示该数据库的部分内容。
我遇到的问题
- 下面的 HTML 代码被注入到我的数据库的其中一张表中的每个记录的描述列中
<div style=position:absolute;top:-9999px;><a href=http://cashfastreiiu.com >cash fast</a><a href=http://guaranteedpaydayloansmsflg.com >guaranteed payday loans</a><a href=http://instantcashroacg.com >instant cash</a><a href=http://paydayloanstorezxucx.com >payday loan store</a><a href=http://paydaylendingvbmpz.com >payday lending</a></div>
- 我对 cashfastreiiu.com 链接进行了谷歌搜索,结果显示其他几个网站的数据库中也有完全相同的 HTML 字符串,甚至还显示在他们的公共网站上。
我的问题是
怎么会发生这种情况?HTTP 服务器 (IIS 7.5) 只公开了 80 端口,并且该服务器仅使用其内部 IP 连接到数据库。SQL 服务器不向公众公开。桌面客户端应用程序在 8 台员工计算机上运行,这些人使用 Windows 7 计算机,处于锁定模式,没有管理员权限。他们无法安装需要管理员批准的应用程序。
公共网站仅供查看,无法从公共网站更新数据。互联网上的任何人都无法更新或将数据输入数据库。
我应该从哪里开始寻找安全漏洞?
谢谢
答案1
正如您的标题所示,这很可能是由 SQL 注入引起的(但如果没有看到更多网站的实际代码,真的无法说......)。
要进行故障排除,您需要查看为您的网站提供数据的代码。我假设您从用户那里获得某种输入,搜索字符串或其他内容,然后使用它来选择要显示的数据 - 在这种情况下,您应该查看这些选择是如何做出的。您是否使用类似的东西进行过滤sqlstring = "SELECT * FROM table WHERE somecolumn LIKE %'" + searchstr + "'"
?如果是这样,您就容易受到 SQL 注入的影响。它也不必这么明显 - 有很多错误可能会暴露数据库......
不管这种情况是如何发生的,有一种简单而又极其有效的方法可以防止这种情况再次发生:确保网站用于获取数据的帐户仅具有对数据库的读取权限。如果需要,请在 SQL Management Studio 中创建一个新用户,为该用户授予其所需表的只读权限(仅此而已!),并在网站配置中更改连接字符串以使用新帐户。这样,网站其余代码有多糟糕就无关紧要了 - 从 Web 界面访问数据库的用户可能会绝不无论如何都将任何内容存储在数据库中。
答案2
由于显示信息需要从数据库恢复,所以可能发生了SQL注入攻击并发生了插入。