2010-10-30 147 views
1

我是新來這個論壇,並與我的MySQL/PHP網站有一個困境。現在我創建了一個將SQL查詢傳遞給它並執行它的函數。我沒有考慮到的事實是,我的SQL查詢被傳遞給函數顯示在所有瀏覽器的「查看源代碼」中;這是嚴重的安全問題,因爲黑客可以看到查詢。下面是函數的一個片段:如何隱藏來自Web瀏覽器的SQL查詢(PHP)

// connect to MySQL 

$connection = mysql_connect($host,$username,$password) or die("Couldn't connect to MySQL". mysql_error()); 

// selects the database 
$db = @mysql_select_db($db_name,$connection) or die("Couldn't select database"); 

function statement ($query) 
{ 

    global $connection, $db; 
    $sql = $query; 
    $results = mysql_query($sql, $connection) or die(mysql_error()); 
    return $results; 

} 

下面是它怎麼叫:

$cat_results = statement("select * from $category"); 

有沒有一種方法來隱藏使用我具備的功能從瀏覽器傳遞查詢?如果沒有更好的方法來提供這個功能的建議?

真的很感謝這個!

安德烈

+2

提供的代碼中沒有任何內容會向瀏覽器輸出任何查詢。你能提供更多的細節/代碼嗎? – lonesomeday 2010-10-30 22:23:33

+0

當然,我可以告訴你什麼是輸出到瀏覽器「查看源」。原諒格式! ​​ ​​<選擇name = 「cat_add []」> SELECT * FROM'category' <選項值= '1'>頂部故事<選項值= '2' > business Andre 2010-11-01 13:43:20

+0

@Andre看起來像你的代碼中的錯誤。短標籤可能會被禁用,或者您可能會使用混合的html/php標籤做一些奇怪的事情。我個人只使用php的打印或模板系統。混合的HTML和PHP讓我嘔吐。 (沒有笑話) – rook 2010-11-01 21:35:21

回答

0

不建議將查詢字符串傳遞一路瀏覽器/客戶端。您應該只將查詢結果傳遞給客戶端。

+0

那麼我的意圖是顯示什麼來自查詢的結果集到客戶端,正在發生。理論上,查詢過程應該隱藏到客戶端,因爲我沒有返回查詢,而是返回結果集。 – Andre 2010-11-01 15:35:23

0

除非你在你的服務器上禁用了PHP,否則你的用戶將永遠看不到你的PHP代碼。

0

PHP代碼應該永遠不會出現在html源代碼中。當事情正常工作時,它應該全部由服務器處理,並且只將結果發送給客戶端。也許你錯過了<??>標籤的某處,這可以防止它被視爲php?

+0

那麼我正在運行一個本地服務器設置與WAMP聽說過它?我還沒有嘗試過現場服務器,因爲我還處於製作階段。我正在檢查我的代碼,看看我是否在標記中封裝了我的PHP代碼。但是你認爲在本地服務器上運行它可能會成爲問題嗎? – Andre 2010-11-01 13:37:15

2

首先PHP不能被客戶端查看,它總是由服務器執行。其次,客戶端可以在您的服務器上執行SQL。這是SQL Injection的基礎。如果您使用JavaScript構建查詢,然後發送一個PHP腳本來執行,那麼您的手中就存在一個非常嚴重的漏洞。

+0

確切的說,這就是我在處理PHP時所想到的。但顯然我在我的瀏覽器視圖源中看到「select * from $ category」。不,我沒有使用JavaScript來建立查詢。 – Andre 2010-11-01 13:31:19