2010-12-17 69 views
2

對不起,這可能是一個非常愚蠢的問題,但在人們將查看的頁面上運行此代碼是否安全,還是應該將其封裝到函數中並調用它?在人們將要訪問的頁面上運行此查詢是否安全?

$stmt = $db->prep_stmt("select * from .... where userid = ? and username = ?"); 

/* Binding 2 parameters. */ 
$stmt->bind_param("is", $userid, $username); 

/* Binding 2 result. */ 
$stmt->bind_result($isbn, $title, $author, $coef, $bookid); 

/* Executing the statement */ 
$stmt->execute() or die ("Could not execute statement"); 

/* 
* Making PHP buffer the whole result, 
* not recommended if there is a blob or 
* text field as PHP eats loads of memory 
*/ 
$stmt->store_result(); 
while ($stmt->fetch()) { 
/* 
    * Here you can use the variables $isbn, $title, $author, $coef, $bookid, 
    * which contatin the data for 1 row. 
    */ 
    print "<tr>". 
    "<td>".$isbn."</td>". 
    "<td>".$title."</td>". 
    "<td>".$author."</td>". 
    "</tr><tr><td>"; 

} 

回答

5

從安全角度來看,它們將是一樣的。這是一個軟件設計的問題。但是,您可能需要考慮更好的錯誤處理(至少對於生產而言)。具體來說,沒有必要泄漏錯誤的原因(「無法執行語句」)。通常,您需要一個通用的錯誤頁面(「對不起,服務器出現問題,請嘗試進入主頁。」)。

+0

進行消毒處理嗯,這實際上並不是我的代碼。我只是從準備好的語句的教程頁面複製它。我只是好奇,如果可以的話,如果我在我的index.php中有這樣的代碼,並且使用該網站的人在index.php – mcbeav 2010-12-17 04:43:09

+0

上,但是感謝您的好評,我非常感謝幫助 – mcbeav 2010-12-17 04:43:32

1

糾正我,如果我錯了,但你似乎是擔心人們可以查看你的PHP代碼,但你把它放在不同的文件,做

$dataAccessor = new MyDataAccessorObject(); 
$dataAccessor->checkUser($userId, $userName); 

他們wouldnt't看到任何有意義的事,正確?

無論代碼是否爲功能都無關緊要。即使在人們「看」的PHP上,他們也無法看到代碼,只能看到呈現的HTML。在php標籤之間,影響用戶可以看到他們是否擊中「查看源代碼」的唯一內容是被回顯或打印的東西或其他內容。

試着在這裏查看PHP,我敢! http://lirr42.mta.info/schedules.php(這只是一個隨機的例子,沒有什麼特別之處)

你需要擔心的是安全明智的是輸入和SQL注入。看來你的參數化處理。我會想象一下這個用戶名或用戶名,並且你需要確保一些混蛋不會輸入像blah' OR 1=1這樣的用戶名和作弊。你準備好的語句和參數綁定應該處理這個如果您不確定您是否可以使用mysql_real_escape

相關問題