检查 SQL 输入是否有效 SQL [duplicate]

Check if SQL input is valid SQL [duplicate]

提问人:C'mon 提问时间:2/5/2014 更新时间:2/5/2014 访问量:3588

问:

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

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

评论

0赞 Joachim Isaksson 2/5/2014
SQL有很多种方言,你有什么特别的方言吗?
0赞 gen_Eric 2/5/2014
您正在对这些已发布的 SQL 查询做些什么? 并且是有效的查询;)DELETE FROM users;DROP DATABASE database
0赞 gen_Eric 2/5/2014
也许这会有所帮助:code.google.com/p/php-sql-parser
0赞 Langusten Gustel 2/5/2014
你昨天已经问过了!
0赞 Eisa Adil 2/5/2014
为什么首先需要这样做?

答:

0赞 Langusten Gustel 2/5/2014 #1

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

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

我引用的是戈德温的话。

评论

0赞 Joachim Isaksson 2/5/2014
回复:事务,例如,大多数(所有?)数据库都不允许你回滚。DROP DATABASE
0赞 remedy. 2/5/2014 #2

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

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

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

评论

0赞 Funk Forty Niner 2/5/2014
实际上,这是可能的(有了正确的 's 和 's 序列,现在一切皆有可能;-)。我使用一组关键字制作了一个脚本,如果找到一个关键字,那么它会执行我告诉它执行的任何操作。它可以很容易地修改以适应OP的愿望。顺便说一句,我没有对此投反对票。这不是我的风格。;-)01
0赞 STT LCU 2/5/2014
如果你想说某件事是不可能的,你必须证明它。其他答案不同意你的看法。(我是反对票)
0赞 Joachim Isaksson 2/5/2014
@STTLCU 好吧,公平地说,我没有看到一个不同意的答案,它实际上显示了一个正则表达式或任何指向如何构造实际正则表达式的指针...... :)
1赞 remedy. 2/5/2014
@Fred-ii- 你是用正则表达式做的吗?
0赞 Funk Forty Niner 2/5/2014
我用@charlesisjan - 没有使用正则表达式。in_array()
0赞 sigy 2/5/2014 #3

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

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