2014-09-29 41 views
1

我試圖從運行JS查詢其執行在SQL Server 這個查詢應該找到在數據庫用戶根據它的用戶名和密碼。如何更改「與」

var str = "SELECT * FROM Users where (username = " + params.user + ") and (password = " + params.password + ")"; 

哪些PARAMS是參數發送由用戶在網址:

localhost:8888/login?user="abc"&password="123" 

但是str的值是:

str = SELECT * FROM Users where (username = "abc") and (password = "123") 

我TR ied使用string.replace替換「with」,但是當我使用「而不是」打印str時,它使用「。

有什麼建議嗎?也許我不是第一個有這個問題...

+5

這是一個sql注入的邀請,不是嗎? – 2014-09-29 09:39:34

+0

也沒有密碼哈希!我真的希望這不是在生產服務器上... – Novocaine 2014-09-29 09:45:57

+0

我認爲這是一個練習傢伙... – 2014-09-29 09:47:08

回答

-1

插入「在你的SELECT,像這樣:

var str = "SELECT * FROM Users where (username = '" + params.user + "') and (password = '" + params.password + "')"; 

和」來自請求刪除:

localhost:8888/login?user=abc&password=123 
+0

何,傻我是... :) – user2004403 2014-09-29 09:48:08

+0

查詢應該參數化。切勿通過連接用戶輸入來建立SQL語句字符串。 – 2014-09-29 12:31:58

+0

@ DanGuzman-SQLServerMVP:我沒有使用參數嗎?有什麼模式可以做到嗎?我應該在客戶端加密並在服務器端解密嗎? – user2004403 2014-10-01 12:21:10

0

待辦事項這樣的:

var str = "SELECT * FROM Users where (username = " + params.user.replace(/"/g, "'") + ") and (password = " + params.password.replace(/"/g, "'") + ")"; 

它會替換單者雙引號..

See the DEMO here

+0

查詢應該被參數化。即使嘗試清理值,也不要通過連接用戶輸入來構建SQL語句字符串。考慮如果值的結果是「NULL; DROP TABLE Users; - 」 – 2014-09-29 12:36:09

0

下面是參數化的SQL實例來完成這個任務。

var str = "SELECT * FROM dbo.Users where (username = @username) and (password = @password)"; 

var command = new SqlCommand(str, connection); 

var parameters = new List<SqlParameter>() 
{ 
    new SqlParameter("@username", SqlDbType.VarChar) { Size = 30, Value = params.user }, 
    new SqlParameter("@password", SqlDbType.VarChar) { size = 30, Value = params.password }, 
};  

command.Parameters.AddRange(parameters.ToArray());