提问人:LukerMaster 提问时间:2/1/2022 更新时间:2/1/2022 访问量:565
检查字符串中是否有 SQL 注入而无法访问数据库(无参数)
Check if there is SQL injection in a string without access to the database (no parameters)
问:
我有一项任务是检查并证明是否有办法在不首先访问数据库的情况下防止 SQL 注入 - 所以没有参数化语句。 这基本上意味着:
有没有办法使用任何类型的工具或框架将 SQL 语句解析为字符串,以证明 SQL 已被注入其中。
任何可用的技术。
起初,我有一个想法来检查SQL是否与这样的特定模式匹配:
让 let 成为用户可以键入的任何类型的字符串。
这是我的 SQL:somewhere
SELECT Id FROM somewhere
此语句的模式如下所示:
SELECT SOME_VALUE FROM SOME_TABLE
然后假设用户写入变量 - (我知道它不是最聪明的 SQL 注入)someTable WHERE 1=1;
somewhere
但关键是现在我有一个声明,看起来像这样:
SELECT Id FROM someTable WHERE 1=1;
这有效地为我们提供了一个具有如下模式的语句:
SELECT SOME_VALUE FROM SOME_TABLE WHERE SOME_CONDITION
这与初始模式不匹配:
SELECT SOME_VALUE FROM SOME_TABLE
这是检查是否注入了 SQL 的正确方法吗?我还没有找到任何实际使用这种技术的工具,或者除了参数(需要连接到数据库)之外的任何其他技术。别担心 - 我知道参数是要走的路,这个任务是关于没有与数据库的连接。
答:
-1赞
Nihad Amin
2/1/2022
#1
如果您阻止某些关键字和符号,例如“WHERE”、“AND”、“OR”、“;” 和“=”,那将是一个想法。
但这只是一种幼稚的方法,对于生产环境,您应该使用参数化语句。
评论
0赞
LukerMaster
2/1/2022
我知道参数化语句是要走的路。这只是一个不同类型的问题。
评论