2011-12-16 74 views
1

我有這個其中工程:如何在傳統的asp中預防SQL注入做準備語句?

sqlString = "SELECT * FROM employees WHERE lastname = '" & last_name & "'" 
Set cmd = Server.CreateObject("ADODB.Command") 
Set cmd.ActiveConnection = dbConn 
cmd.CommandText = sqlString 
cmd.Prepared = True 
Set recs = cmd.Execute 

我的問題是,上面的sqlString動態部分是準備好的語句命令。我不認爲我上面有什麼保護我。

在執行準備好的語句之前,我不必修復此sqlString嗎?讀這讓我想到的是:How can prepared statements protect from SQL injection attacks?

「雖然在事先準備好的聲明的情況下,我們不會改變我們的計劃,它會保持原樣 這點

我們發送程序到服務器第一

$db->prepare("SELECT * FROM users where id=?"); 

其中該數據由一些所謂的「佔位符」 然後我們分別發送這些數據變量取代:

$db->execute($data); 

所以,它不能改變我們的程序並造成任何傷害。 很簡單 - 是不是「

但我不知道如何讓我的查詢正確的我也不知道他從prepare如何到達$data希望爲指導,感謝

?。

回答

9

爲什麼不使用ADO命令參數?

var oCmd = Server.CreateObject("ADODB.Command"); 
oCmd.CommandText = "SELECT * FROM employees WHERE lastname = ?"; 
oCmd.Parameters.Append(oCmd.CreateParameter(undefined,202, 1, 50,"last name"))//adVarWChar 
+0

我會試試。謝謝。什麼是未定義的,202,1,50,? – johnny 2011-12-16 19:19:25

0

最簡單的方法是在SQL中使用存儲過程並使用Commands。否則,您不得不從Request對象中收集某些字符,如單引號和雙連字符等。

相關問題