mysql_real_escape_string(access_denied)的替代品

时间:2011-08-10 19:59:19

标签: php mysql

我目前正在使用sphinxql并在我的$ query上使用mysql_real_escape_string但由于没有数据库连接......我获得了拒绝访问权限。我一直在寻找替代方案:

$query = $_GET["query"];



$query = trim($query);
$remove = array(',','}','{',']','[',';',':','>','<','|',')','(','*','%','$','!','^','/');
$query=str_replace($remove, "", $query);
$con = mysql_connect("localhost:9306","root","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

$res = mysql_query("SELECT * FROM test1 WHERE MATCH ('$query')");

6 个答案:

答案 0 :(得分:4)

如果你神秘地希望在没有数据库连接的情况下转义值,你可以使用这个函数:

<?php
function mysql_escape_mimic($inp) {
    if(is_array($inp))
        return array_map(__METHOD__, $inp);

    if(!empty($inp) && is_string($inp)) {
        return str_replace(array('\\', "\0", "\n", "\r", "'", '"', "\x1a"), array('\\\\', '\\0', '\\n', '\\r', "\\'", '\\"', '\\Z'), $inp);
    }

    return $inp;
}
?>

答案 1 :(得分:3)

  

但由于没有数据库连接......我拒绝访问。

建立连接后运行mysql_real_escape_string()。没有其他办法。

转义函数需要有效连接的事实是设计和必要的,因此它知道它为数据准备的字符集。没有这些信息,就有vulnerabilities的空间。

答案 2 :(得分:1)

已在Alternative to mysql_real_escape_string without connecting to DB

处回答

太多的php说:“没有数据库连接安全地转义字符串是不可能的.mysql_real_escape_string()和预处理语句需要连接到数据库,以便它们可以使用适当的字符集转义字符串 - 否则SQL注入使用多字节字符仍然可以进行攻击。

如果你只是在测试,那么你也可以使用mysql_escape_string(),它不能100%保证不受SQL注入攻击,但如果没有数据库连接,就不可能建立更安全的东西。“

答案 3 :(得分:0)

为什么你需要mysql_real_escape_string我没有连接?

您可以先连接,然后在执行之前汇总查询

答案 4 :(得分:0)

我可以这样使用连接到 SphinxQL 服务器的 mysql_real_escape_string ()函数:

$msg_sphinx = mysql_real_escape_string($msg, $db_sphinx);

$ db_sphinx是PHP用于处理SphinxQL连接的资源:

$db_sphinx = mysql_connect(DB_SPHINX_SERVER, DB_SPHINX_USER, DB_SPHINX_PASS);

所以,没有必要使用替代 mysql_real_escape_string ()函数

答案 5 :(得分:0)

即使通过替换这组字符串,将直接查询字符串传递给数据库也是不安全的。您还可以在字符串替换集中添加'-''--'以避免SQL注入,因为' - '用于SQL注释及其SQL注入的关键。

此外,我还尝试将HTML表单元素中的sql语句从一个页面传递到另一个页面,但它也不能用作HTML请求和响应在字符串末尾添加一些额外的字符。

会话变量也没用。