[英]Escape characters in JavaScript?
我正在創建這樣的文件名
var name = $('#top-line').val();
var fname = random+'-'+name+'-something';
fname是文件名。 我不知道用戶可能會在#top-line中輸入什么內容,如何確定字符的安全性來逃避這些字符。 我用$top line = somethin "else"
嘗試了一下,事情變得一團糟。
從我讀到的評論中,我了解到
escape("Need tips? Visit W3Schools!") will produce
Need%20tips%3F%20Visit%20W3Schools%21
我的疑問是文件是否將另存為
Need%20tips%3F%20Visit%20W3Schools%21
如果有人寫轉義符(/需要提示?訪問W3Schools!”)
在服務器上編輯我正在保存文件
$name = uniqid('somevalue',true);
$file = 'usermemes/' . $name . '.jpeg';
在用戶計算機上,它們具有用戶提供的名稱。
您要在服務器上執行此操作 。 原因如下:即使您的JavaScript很小,也請記住,從理論上講,任何人都可以查看和修改您的腳本。 您可以編寫一個很棒的例程來檢查不良字符,確保用戶沒有進行任何“注入”操作,並將輸入內容轉換為服務器操作系統的良好文件名,但是如果有人真的有動力,他們可以下載本地文件。復制頁面,編輯腳本並根據需要觸發對服務器的惡意請求。
在客戶端進行一些基本的轉義是合理的(例如encodeUri-有關詳細信息,請參見此答案 ),但是您需要在服務器上進行實際工作。 不要僅僅接受用戶輸入,將其輸入文件名字符串,然后保存在服務器上。 它可以很簡單,例如一組str_replace
調用或一個檢查允許字符的正則表達式。 您只想確保在用戶看不見的地方進行操作。
編輯 :如果您只是在本地使用用戶輸入的名稱,那么我將使用encodeURIComponent
並按照Prabhu的建議使用正則表達式刪除單引號和雙引號。 (但是為什么不將文件以唯一的名稱保存在服務器上,然后讓用戶下載呢?
用空字符串啟動“名稱”變量
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, '');
或通過使用此邏輯來提醒用戶不要輸入雙引號
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.