代码之家  ›  专栏  ›  技术社区  ›  Zev Spitz

SQL注入和访问宏(不是VBA)

  •  0
  • Zev Spitz  · 技术社区  · 6 年前

    Microsoft Access宏(不是VBA)是否容易受到SQL注入的攻击?

    有代码流、临时变量等的构造。是否可以编写一个宏,将用户输入合并到一个SQL语句中,这样SQL语句将产生意想不到的和不希望的结果?

    SQL语句可用于 RunSQL 行动。或者, 设置属性 可以使用操作更改 记录源 赛源 财产。

    如果是,怎么做?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Erik A    6 年前

    当然,尽管宏提供的功能非常有限,但这种情况大多是学术性的。

    假设我正在尝试实现一个不允许访问数据库的登录系统,而不依赖于VBA。我正在创建一个表单,为用户名和密码添加两个文本框,我正在创建表单模式,并删除关闭按钮以禁止用户关闭表单,使我的宏成为访问数据库的唯一方法(在许多方面都不安全)。

    宏:

    If DCount("*","tblUsers","UserName = '" & Forms![LoginForm]!Username & "' AND [Password] = '" & Forms![LoginForm]!Password & "'") <> 0
        CloseWindow
            Object type = Form
            Object Name = LoginForm
            Save = Prompt
    

    我的喷射有效载荷是经典的:输入 ' OR 1=1 OR 'A' = ' 作为用户名,空密码,你在。

    然而,这个例子很荒谬。字符串定界符和连接运算符被省略以使用基于形式的参数,而注入突然变得不可能。

    这个 RunSQL 然而,宏操作根本不支持动态SQL,因此不易受到SQL注入的攻击。不过,您可以在其中使用表单参数。

    正如泽夫·斯皮茨在评论中指出的那样, SetProperty 无法修改行或记录源,因此不能用于SQL注入攻击。