【问题标题】:How to fix SQL Inject Me test results如何修复 SQL Inject Me 测试结果
【发布时间】:2015-04-11 07:16:51
【问题描述】:

我被要求查看一些经典的 ASP 代码,这很好。但遇到的问题是他正在使用名为 Sql Inject Me (SIM) 的 FireFox 插件测试 SQL 注入漏洞。 它得到 306 注入错误。他希望能够运行它而不会出现这些错误。

我开始...

function scrub() {
        var oldLastname = document.getElementById("Jobtitle").value;

        var newLastName = oldLastname.replace(";", " ").replace("="," ").replace(' " " ', " ").replace("'"," ");
    }

这将在单击提交按钮时触发。我不确定这是否会清除错误

我读到了 FireFoxes 插件在做什么,那就是……

“该工具通过表单字段发送数据库转义字符串来工作。然后它会查找输出到页面呈现的 HTML 中的数据库错误消息。”

在我走得更远然后发现有更简单的方法之前,有什么好的想法可以解决这个问题吗?我确实发现这个链接很有用,直到我意识到它是关于 php 而不是 JavaScript 或 ASP。 Looked at this

【问题讨论】:

  • 搜索和替换是不够的。将 SQL 语句更改为 parameterized queries 并阅读 OWASP 的 SQL Injection Prevention Cheat Sheet
  • @Melioratus,我不习惯经典的 ASP。我确实有他发送的另一个页面,其中包含为更新创建的记录集。我要看看那些参数化查询。它们看起来很相似。
  • 如果您遇到困难或需要其他资源,请在评论中联系我,我会看看能否为您指明正确的方向。
  • @Melioratus,谢谢...我查看了参数化查询,但不了解如何使其工作。对象看起来像这样..objRecordset.Fields("City") = Request("City")。我以前没有遇到过这样的事情。我尝试删除一些字符,例如 ' ; -- 但我得到的错误数量与他相同,唯一的区别是他得到了 302 而我得到了 404
  • 在 stackoverflow 上找到另一个示例,显示使用 classic ASP with jScript 的参数化 sql。因为经典的 asp 允许多种方式连接到数据库,所以您应该在您的问题中添加一些 SQL 语句的代码示例,以便我们找到正确的语法。

标签: javascript asp-classic sql-injection


【解决方案1】:

参数化查询产生 rsInvoices RecordSet

<%
Dim rsInvoices
Dim rsInvoices_cmd
Dim rsInvoices_numRows

Set rsInvoices_cmd = Server.CreateObject ("ADODB.Command")
rsInvoices_cmd.ActiveConnection = MM_connection_STRING
rsInvoices_cmd.CommandText = "SELECT * FROM saleman.GetInvoices(?,?)" 
rsInvoices_cmd.CommandType = 1
rsInvoices_cmd.Prepared = true
rsInvoices_cmd.Parameters.Append rsInvoices_cmd.CreateParameter("param1", 135, 1, -1, rsInvoices__MM_day) '' adDBTimeStamp
rsInvoices_cmd.Parameters.Append rsInvoices_cmd.CreateParameter("param2", 200, 1, 255, rsInvoices__MM_plan) '' adVarChar

Set rsInvoices = rsInvoices_cmd.Execute
%>

在哪里

<%
Dim rsInvoices__MM_day
rsInvoices__MM_day = "1.2.2014"
If (Request("DayOfReport") <> "") Then 
  rsInvoices__MM_day = Request("DayOfReport")
End If
%>
<%
Dim rsInvoices__MM_plan
rsInvoices__MM_plan = "plan"
If (Request("type") <> "") Then 
  rsInvoices__MM_plan = REPLACE(Request("type"),"'","''")
  ''  This excludes '-injection
  ''  U can write function to check for other types of SQL-Inj
  ''  take in mind that ' sign can be coded in some ways 
End If
%>

【讨论】:

  • 不错的参数化查询示例!我有一个警告第 2 部分。虽然简单的搜索和替换功能是 SQL 注入和跨站点脚本漏洞 (XSS) 的常见修复,但当将国际字符集添加到混合中时,维护代码会变得有问题。显式验证和验证用户输入更安全,并允许向用户提供有用的反馈。
猜你喜欢
  • 2010-11-19
  • 2019-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-07
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多