【问题标题】:Check if SQL input is valid SQL [duplicate]检查 SQL 输入是否是有效的 SQL [重复]
【发布时间】:2014-02-04 16:17:38
【问题描述】:

是否有任何正则表达式来检查字符串是否是有效的 SQL?它必须与 PHP 兼容。我的代码。

if(!preg_match("regular expression", $_POST['sql_input']){
    echo "Please enter valid SQL.";
    exit;
}

【问题讨论】:

  • SQL 的方言有很多种,你想到哪一种?
  • 你在做什么来处理这些发布的 SQL 查询? DELETE FROM users;DROP DATABASE database 是有效的查询;)
  • 也许这会有所帮助:code.google.com/p/php-sql-parser
  • 你昨天已经问过了!
  • 为什么你首先需要这样做?

标签: php


【解决方案1】:

你可以试试这个库:http://code.google.com/p/php-sql-parser/。 我还没有使用它,所以我不能保证它,但代码看起来像 它将能够区分有效和无效的 SQL。

如果您的 SQL 变体允许,另一个选项可能是使用事务 它。事务将允许您执行 SQL 然后取消 它随后扭转了造成的任何损害。我想我会 不过更喜欢选项 1。

我引用戈德温的话。 Source

【讨论】:

  • Re:事务,大多数(全部?)数据库不允许您回滚,例如 DROP DATABASE
【解决方案2】:

不,这是不可能的。但是,如果您想保护自己免受 SQL 注入攻击,您应该使用其他机制。

例如:https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php

【讨论】:

    【解决方案3】:

    简单的答案。你试图做的事情是不可能的。

    您需要一个 SQL 解析器来检查语句是否有效。

    在这里查看:http://www.dpriver.com/blog/list-of-demos-illustrate-how-to-use-general-sql-parser/vendor-specific-offline-sql-syntax-check/

    【讨论】:

    • 实际上,这是有可能的(01 的正确顺序现在一切皆有可能 ;-)。我使用一组关键字制作了一个脚本,如果找到了一个,它就会按照我说的去做。它可以很容易地修改以适应 OP 的愿望。顺便说一句,我没有对此投反对票。这不是我的风格。 ;-)
    • 如果你想说某件事是不可能的,你必须证明它。其他答案不同意你的看法。 (我是反对者)
    • @STTLCU 好吧,公平地说,我没有看到一个不同意的答案,它实际上显示了一个正则表达式或任何指向如何构造一个实际的正则表达式的指针...... :)
    • @Fred-ii- 你是用正则表达式做的吗?
    • 我使用了 in_array() @charlesisjan - 没有使用正则表达式。
    猜你喜欢
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    • 2013-01-09
    • 2018-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多