2015-02-05 88 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