2011-08-10 44 views
1

我目前使用sphinxql並在我的$查詢中使用mysql_real_escape_string,但由於沒有數據庫連接...我得到一個拒絕訪問。我一直在尋找替代品:替代mysql_real_escape_string(access_denied)

$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')"); 
+2

首先連接到數據庫,然後使用轉義功能。或者我錯過了什麼?另一種選擇是準備好的聲明,結帳PDO。 – hakre

+0

mysql_escape_string不需要數據庫連接,但不推薦使用。 – ceejayoz

回答

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; 
} 
?> 
3

,但因爲沒有數據庫連接...我得到拒絕訪問。

連接建立後運行mysql_real_escape_string()。沒有其他辦法。

轉義函數需要活動連接的事實在設計上是必要的,因此它知道準備數據的字符集。沒有這些信息,有空間vulnerabilities

+0

雅我知道,但問題是...... sphinxql不採取數據庫連接 – re1man

+0

@Praneet你需要什麼'mysql_real_escape_string()'然後呢?我不明白。 –

+0

嗯我猜這是真的:)我假設使用sql查詢的獅身人面像索引可能是易受攻擊的 – re1man

0

爲什麼你需要mysql_real_escape_string我沒有連接?

你可以首先連接,事後組裝查詢(執行前)

+0

雅我知道......但問題是...... sphinxql不採取數據庫連接 – re1man

+0

你可以使用函數mysql_escape_string。它執行mysql_real_espace_string所做的操作,它沒有連接,所以它不會考慮任何連接特定的設置。 – GolezTrol

1

在已經回答:Alternative to mysql_real_escape_string without connecting to DB

太多PHP的說:「這是不可能的安全逃離的字符串不包含DB連接mysql_real_escape_string()和預準備語句需要連接到數據庫,以便它們可以使用適當的字符集來轉義字符串 - 否則使用多字節字符的SQL注入攻擊仍然是可能的。

如果您只是測試,那麼你可以使用mysql_escape _string(),它不能100%保證免受SQL注入攻擊,但不可能在沒有數據庫連接的情況下構建更安全的東西。「

+0

除了找到正確的字符集之外,還需要連接嗎?如果沒有,那麼它是否可以在PHP中完成,而正確的字符集是已知的? – Jason

0

我可以使用mysql_real_escape_string連接到SphinxQL服務器這樣()函數:

$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()函數

0

它不是安全的,即使通過更換這組字符串傳遞直接查詢字符串到數據庫中。您還可以在字符串替換集中添加'-''--'以避免SQL注入,因爲' - '用於SQL註釋及其注入SQL注入的密鑰。

此外,我還試圖將HTML表單元素中的sql語句從一個頁面傳遞到另一個頁面,但它也不能作爲HTML請求和響應在字符串末尾添加幾個額外的字符。

會話變量也沒有做同樣的事情。