Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将utf-8字符串中的字符列入黑名单?_Javascript_Html_Regex_Whitelist_Blacklist - Fatal编程技术网

Javascript 如何将utf-8字符串中的字符列入黑名单?

Javascript 如何将utf-8字符串中的字符列入黑名单?,javascript,html,regex,whitelist,blacklist,Javascript,Html,Regex,Whitelist,Blacklist,我有一个HTML文本输入,用户可以在其中输入自己的名字。该名称只是一个用户友好的显示名称,它不用于标识数据库中的用户或后端的任何内容 我想允许使用utf-8字符,这样人们就可以输入他们母语的字符,不管是中文还是瑞典语,或者其他什么 但是,我想将某些字符列入黑名单,如,[,],?,*,等等,以阻止任何潜在的脚本小子试图利用输入进行SQL注入或其他任何操作 我认为这将是一个简单的代码,在网络上会有很多例子,但答案,如果有,是隐藏在如何使用白名单来验证电子邮件地址的例子中(只有英文字母数字字符,没有亚

我有一个HTML文本输入,用户可以在其中输入自己的名字。该名称只是一个用户友好的显示名称,它不用于标识数据库中的用户或后端的任何内容

我想允许使用utf-8字符,这样人们就可以输入他们母语的字符,不管是中文还是瑞典语,或者其他什么

但是,我想将某些字符列入黑名单,如,[,],?,*,等等,以阻止任何潜在的脚本小子试图利用输入进行SQL注入或其他任何操作

我认为这将是一个简单的代码,在网络上会有很多例子,但答案,如果有,是隐藏在如何使用白名单来验证电子邮件地址的例子中(只有英文字母数字字符,没有亚洲或其他特定语言的字符),或者,奇怪的是,如何完全停止某些字符的按键操作

我不想完全停止按键,因为我认为这可能会让我的用户感到困惑。相反,我会输出一个错误,如果他们输入了一个被列入黑名单的字符,他们就不能使用字符X

那么,对于像我这样一个完全不懂正则表达式的人来说,有没有一种简单的方法可以将Javascript中的字符列入黑名单


如果白名单解决方案不妨碍用户输入他们使用的任何语言的时髦字符,我也会选择白名单解决方案。

首先,您需要清除客户端和服务器端的输入数据。任何聪明到足以创建攻击的人都会聪明到足以长时间禁用javascript,以便将他们想要的数据输入到您的表单中

至于防止进入的javascript正则表达式,还有很多问题需要讨论

//一些技术性的东西

//简单的js示例,用于停止输入不需要的字符


从我读到的情况来看,大家的共识似乎是,你需要列入白名单,而不是黑名单。也许有经验丰富的SO人员可以为您指出处理用例的最佳方法。

首先,您需要清理客户端和服务器端的输入数据。任何聪明到足以创建攻击的人都会聪明到足以长时间禁用javascript,以便将他们想要的数据输入到您的表单中

至于防止进入的javascript正则表达式,还有很多问题需要讨论

//一些技术性的东西

//简单的js示例,用于停止输入不需要的字符


从我读到的情况来看,大家的共识似乎是,你需要列入白名单,而不是黑名单。也许有经验丰富的人可以为您指出处理用例的最佳方法。

这实际上取决于您通常如何进行验证(我喜欢作为一个框架),但基本检查可能类似于:

// set up a handler function
function checkBlacklist() {
    // check against a regex of bad chars
    // many ([]*? etc) may need to be escaped to work in regex
    if (/[\[\]<>\*\?]/.test(this.value)) {
        // take evasive action of some kind
    }
}
// assign it to your input
document.getElementById('mynameinput').onchange = checkBlacklist;
//设置处理程序函数
函数检查黑名单(){
//检查坏字符的正则表达式
//许多([]*?等)可能需要转义才能在正则表达式中工作
if(/[\[\]\*\?]/.test(this.value)){
//采取某种逃避的行动
}
}
//将其分配给您的输入
document.getElementById('mynameinput')。onchange=检查黑名单;

但是,正如迈克·丹尼尔斯(Mike Daniels)所指出的,如果你主要关心的是脚本儿童,就不要这样做。任何想弄乱输入表单的人都可以轻松绕过Javascript验证。考虑JavaScript验证是一个很好的UI特性,它可以在不让用户重新加载页面的情况下为用户提供有用的反馈。但这不是任何类型的安全性-无论使用何种Javascript进行验证,都必须检查并清理服务器端的输入。

这实际上取决于您通常如何进行验证(我喜欢作为一个框架),但基本检查可能类似于:

// set up a handler function
function checkBlacklist() {
    // check against a regex of bad chars
    // many ([]*? etc) may need to be escaped to work in regex
    if (/[\[\]<>\*\?]/.test(this.value)) {
        // take evasive action of some kind
    }
}
// assign it to your input
document.getElementById('mynameinput').onchange = checkBlacklist;
//设置处理程序函数
函数检查黑名单(){
//检查坏字符的正则表达式
//许多([]*?等)可能需要转义才能在正则表达式中工作
if(/[\[\]\*\?]/.test(this.value)){
//采取某种逃避的行动
}
}
//将其分配给您的输入
document.getElementById('mynameinput')。onchange=检查黑名单;

但是,正如迈克·丹尼尔斯(Mike Daniels)所指出的,如果你主要关心的是脚本儿童,就不要这样做。任何想弄乱输入表单的人都可以轻松绕过Javascript验证。考虑JavaScript验证是一个很好的UI特性,它可以在不让用户重新加载页面的情况下为用户提供有用的反馈。但这不是任何类型的安全性——无论使用何种Javascript进行验证,都必须检查并清理服务器端的输入。

如果只是“阻止任何潜在的脚本小子试图利用输入”,那么为什么还要麻烦将任何内容列入黑名单?如果你已经知道如何清理你的输入,那么为什么不让别人把任何旧的东西作为他们的显示名呢?你会发现,通过正则表达式验证,白名单比黑名单更快。如果只是“阻止任何潜在的脚本小子试图利用输入”,那么为什么还要麻烦黑名单呢?如果你已经知道如何清理你的输入,那么为什么不让别人把任何旧的东西作为他们的显示名呢?你会发现,使用正则表达式验证,只将其作为白名单而不是黑名单更快。谢谢你的代码!是的,我知道Javascript验证对用户来说只是一种很好的方式。我在PHP方面做了更多的验证,这更具限制性。我将试用此代码并报告成功。谢谢您的代码!是的,我知道Javascript验证对用户来说只是一种很好的方式。我在PHP方面做了更多的验证,这更具限制性。我将试用此代码并报告成功。