2015-02-05 102 views
0

我創建一個文件名,這樣在JavaScript中轉義字符?

var name = $('#top-line').val(); 
var fname = random+'-'+name+'-something'; 

這裏FNAME是文件名。我不知道用戶可能會在#頂線輸入什麼內容,如何逃避角色以確保安全。 我用$top line = somethin "else"試過了,事情搞糟了。

從評論我讀我的理解是

escape("Need tips? Visit W3Schools!") will produce 
Need%20tips%3F%20Visit%20W3Schools%21 

我的疑問是會當什麼人寫 逃生(/極品提示?請訪問W3Schools的文件得到保存爲

Need%20tips%3F%20Visit%20W3Schools%21 

!」 )

編輯在服務器上我保存的文件如

$name = uniqid('somevalue',true); 
$file = 'usermemes/' . $name . '.jpeg'; 

在用戶計算機上,它們具有用戶提供的名稱。

+0

http://www.w3schools.com/jsref/jsref_escape.asp [逃逸字符串在JavaScript]的 – Eun 2015-02-05 13:14:31

+3

可能重複(http://stackoverflow.com/questions/770523/escaping-strings-in-javascript) – Noy 2015-02-05 13:15:04

+0

你會基於用戶輸入實際上在服務器上創建文件嗎?您需要在服務器上執行此類操作,以防惡意用戶無法使用服務器。 – atmd 2015-02-05 13:15:31

回答

0

啓動您的「名字」變量與空字符串

var name= ""; 
name="Need tips? Visit W3Schools!"; 

用戶下載和JavaScript將採取「一切」作爲一個字符串沒有母校它是一種逃避或者是什麼。 甚至

var name= ""; 
name="\Need tips? Visit W3Schools!\"; 

var name= ""; 
name="Need\\ tips? Vis\\it W3\\School\\s!"; 

唯一的事情是你需要照顧雙引號 所以它可以被刪除。完全像這樣。

var name= ""; 
var name = $('#top-line').val(); 
name.replace(/['"]+/g, ''); 

或通過使用這對不提醒用戶輸入雙引號寫入邏輯

+0

'name.replace (/ ['「] +/g,'');'替換所有有問題的雙引號? – Asain 2015-02-05 13:32:57

+0

是啊..但你甚至不能得到雙用戶也需要雙引號..簡單沒有雙引號..我認爲所有的平臺都不支持命名文件中的雙引號。 – 2015-02-05 13:47:56

0

您想要在服務器上執行此操作。原因如下:即使您的JavaScript被縮小,請記住(理論上)任何人都可以查看和修改您的腳本。你可以編寫一個很好的例程來檢查不良的字符,確保用戶沒有做任何「注入」操作,並將輸入變爲服務器操作系統的良好文件名,但如果有人真的有動機,他們可以下載您的頁面的本地副本,編輯腳本並根據需要發送儘可能多的惡意請求到您的服務器。

在客戶端做一些基本的轉義是合理的(比如encodeUri - 詳見this answer),但是你會想在你的服務器上做真正的工作。不要只接受用戶輸入,將其放入文件名字符串中,並保存在服務器上。它可以像調用一組str_replace或檢查允許字符的正則表達式一樣簡單。你只是想確保你在用戶看不到的地方做到這一點。

編輯:如果你僅僅使用本地用戶輸入的名字,我會去與encodeURIComponent並刪除單引號和雙引號用正則表達式爲帕布建議。 (但是,爲什麼不只是保存了一個獨特的名稱服務器上的文件,然後有?

+0

我沒有用服務器上的用戶名保存文件。用戶提供的名稱文件用於在設備上保存文件。我編輯了我的問題以包含更多細節。請再看看重新提到的問題。 – Asain 2015-02-05 13:27:37

+0

更新了我的答案。希望能幫助到你。 – 2015-02-05 13:42:51

+0

我不想爲用戶添加一個額外的步驟。我試過'var name = $('#top-line')。val(); name.replace(/ ['「] +/g,'');'但是當我輸入'something」else時文件仍然沒有擴展名「' – Asain 2015-02-05 13:46:20