在JavaScript中转义字符?
我创建一个文件名,这样在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';
在用户计算机上,它们具有用户提供的名称。
启动您的“名字”变量与空字符串
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, '');
或通过使用这对不提醒用户输入双引号写入逻辑
'name.replace (/ ['“] +/g,'');'替换所有有问题的双引号? – Asain 2015-02-05 13:32:57
是啊..但你甚至不能得到双用户也需要双引号..简单没有双引号..我认为所有的平台都不支持命名文件中的双引号。 – 2015-02-05 13:47:56
您想要在服务器上执行此操作。原因如下:即使您的JavaScript被缩小,请记住(理论上)任何人都可以查看和修改您的脚本。你可以编写一个很好的例程来检查不良的字符,确保用户没有做任何“注入”操作,并将输入变为服务器操作系统的良好文件名,但如果有人真的有动机,他们可以下载您的页面的本地副本,编辑脚本并根据需要发送尽可能多的恶意请求到您的服务器。
在客户端做一些基本的转义是合理的(比如encodeUri - 详见this answer),但是你会想在你的服务器上做真正的工作。不要只接受用户输入,将其放入文件名字符串中,并保存在服务器上。它可以像调用一组str_replace
或检查允许字符的正则表达式一样简单。你只是想确保你在用户看不到的地方做到这一点。
编辑:如果你仅仅使用本地用户输入的名字,我会去与encodeURIComponent
并删除单引号和双引号用正则表达式为帕布建议。 (但是,为什么不只是保存了一个独特的名称服务器上的文件,然后有?
http://www.w3schools.com/jsref/jsref_escape.asp [逃逸字符串在JavaScript]的 – Eun 2015-02-05 13:14:31
可能重复(http://stackoverflow.com/questions/770523/escaping-strings-in-javascript) – Noy 2015-02-05 13:15:04
你会基于用户输入实际上在服务器上创建文件吗?您需要在服务器上执行此类操作,以防恶意用户无法使用服务器。 – atmd 2015-02-05 13:15:31