2011-12-30 122 views
6

我需要使用JavaScript修改該值,以使其可以作爲SQL插入查詢的一部分。如何使用RegExp替換帶有雙反斜槓的反斜線?

目前我有以下代碼來處理單引號的字符。

value = value.replace(/'/g, "\\'"); 

此代碼沒有問題。現在我注意到,獨立反斜槓導致錯誤。

如何刪除這些獨立的反斜槓?

+4

您不應該以直接在查詢中使用數據的方式信任來自用戶的數據。轉義數據應該在服務器端完成,否則使用SQL注入會被黑客攻擊的風險很高,因爲很容易繞過JavaScript。 – 2011-12-30 23:22:43

+2

我非常害怕你正在用JavaScript創建SQL語句。你真的有一個用JavaScript編寫的SQL庫嗎(我認爲不存在),還是你將SQL語句發送到Web服務器去執行?如果是後者,你有一個主要的安全漏洞!你必須在服務器上創建SQL語句。 – 2011-12-30 23:23:31

+4

我真的很希望這是服務器端JavaScript,比如nodejs。 – 2011-12-30 23:24:14

回答

16

現在我注意到,獨立的反斜槓導致錯誤。

您操作的字符串中的反斜槓不會對替換'字符產生任何影響。如果你的目標是取代反斜槓字符,使用此:

value = value.replace(/\\/g, "whatever"); 

...這將替換字符串中的所有的反斜槓「無所謂」。請注意,我不得不寫兩個反斜槓,而不是一個。這是因爲在regular expression literal中,反斜槓用於引入各種特殊字符和字符類,並且也用作轉義字符  —兩個反斜槓一起在正則表達式中(如在字符串中)表示字符串中的單個實際反斜槓。

要改變一個反斜槓兩個反斜槓,使用方法:

value = value.replace(/\\/g, "\\\\"); 

再次注意,在替換字符串得到反斜線,我們不得不逃離各兩個  —導致4總共在替換字符串中。

我需要使用JavaScript修改該值,以使其可以作爲SQL插入查詢的一部分進行放置。

你不想親手做這件事。任何允許您進行數據庫查詢的技術(例如JDBC,ODBC等)都會提供某種形式的準備好的參數化的語句(link),它會爲您處理這些類型的轉義問題。自己動手實際上保證會在軟件中留下可能被利用的安全漏洞。您希望使用必須考慮的團隊的工作,並且在出現問題時定期更新結果代碼,而不是單獨飛行。此外,如果您的JavaScript正在客戶端上運行(因爲絕大多數情況下,但絕不是全部使用JavaScript服務器端),則沒有任何您做了轉義字符串可以使其安全,因爲客戶端請求到服務器可能被欺騙,完全繞過您的客戶端代碼。

+0

我需要用雙反斜槓替換。我可以使用value = value.replace(/ \\/g,「\\」); ? – user1052933 2011-12-30 23:21:26

3

你應該使用某種數據庫庫提供的轉義函數,滾動你自己只會造成麻煩。

相關問題