[英]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.