我有一个输入字段,我想进行验证检查,以防止用户分配类似SQL注入的字符串。如何在JavaScript中完成?
var userInput = '"SELECT * FROM Users WHERE UserId = " + txtUserId;'
var arrayCheck = [SELECT, FROM, WHERE];
所以现在我需要检查userInput以获取数组arrayCheck中的匹配数。
如果匹配数为3或更高,请返回false
,否则返回true
。
答案 0 :(得分:1)
您可以使用
搜索字符串中的字符串var stringVar = 'test';
var x = stringVar.indexOf('test') > -1;
基本上,indexOf将返回字符串中字符串起始位置的索引,如果它找不到它将返回-1。
所以对于你的问题,你可以这样。
function testForSQLKeyWords(inputText) {
var keywords = ['SELECT', 'FROM', 'WHERE'];
var threshold = 3;
var hits = 0;
for (var i = 0; i < keywords.length; i++) {
var keyword = keywords[i];
if (inputText.indexOf(keyword) > -1) {
hits++;
}
}
return hits >= threshold;
}
//Then call it
var inputText = 'SELECT name FROM people';
testForSQLKeyWords(inputText);
我还建议考虑使用.toLowerCase
reference。
答案 1 :(得分:0)
您可以过滤所有 arrayCheck 字词然后计算它们,检查字符串:
var matches = arrayCheck.filter(function(item){
return userInput.indexOf(item) > -1;
});
var numberOfMatches = matches.length;
if(numberOfMatches >= 3)
//do your thing
小心,因为大小写,你无法匹配单词,我建议小写或大写整个字符串。在过滤器内:
return userInput.toLowerCase().indexOf(item.toLowerCase());