PHP - 检查转义字符

时间:2013-04-29 05:26:29

标签: php mysql sql security

对于MySQL数据库查询,我想检查并记录非转义字符。

因为我想要一个安全的数据库,并希望在SQL注入时记录尝试(现在)。

由于它将在测试中,因此必须将值记录到纯文本中。

我不确定如何去做。使用序列化和序列化来查看它是否因为有转义字符的问题而制动,通过记录字符串继续进行。

我意识到这是一种被动的情况,而不是主动,但仍然有利于测试。

3 个答案:

答案 0 :(得分:5)

  

如何检查需要转义的字符串?

直接回答这个问题:最简单的方法可能就是通过适当的转义函数来运行它,看看它是否发生了变化。 E.g:

if ($string !== mydatabaseadapters_escape_string($string)) {
    // there was something escape-worthy in the string
}

这并不意味着该字符串至少是一次尝试的SQL注入攻击。 Escaping只是通过转义SQL语句中使用的特殊字符来保留SQL语法;当您忘记执行此操作时,SQL注入只会产生副作用。需要转义大量常规值,以便在不与注入尝试有任何关系的情况下不破坏SQL语法。

答案 1 :(得分:4)

正如其他人所说,最佳做法是使用预准备语句,查询绑定,或者至少逃避MySQL查询,以保护您的数据库。简而言之,我们的想法是让一个已建立的函数/库处理保护数据库的工作,而不是试图推出自己的解决方案。这样做的另一个好处是,您不需要手动批准任何“有问题”的条目,虽然可能对教育课程有益,但对于在任何规模的网站中使用都是不切实际的。

答案 2 :(得分:3)

如果你真的只是想知道字符串是否需要转义,你可以像这样进行测试(在这里使用PDO)

$originalString = 'Some value';
$quoted = substr($pdo->quote($originalString), 1, -1);
// PDO::quote() wraps the string in quotes so using substr to remove them

if ($originalString != $quoted) {
    // log this string as requiring escaping
}