搜索字符串中包含的字符串

时间:2016-04-22 07:54:43

标签: javascript

我有一个输入字段,我想进行验证检查,以防止用户分配类似SQL注入的字符串。如何在JavaScript中完成?

var userInput = '"SELECT * FROM Users WHERE UserId = " + txtUserId;'
var arrayCheck = [SELECT, FROM, WHERE];

所以现在我需要检查userInput以获取数组arrayCheck中的匹配数。

如果匹配数为3或更高,请返回false,否则返回true

2 个答案:

答案 0 :(得分:1)

您可以使用

搜索字符串中的字符串
var stringVar = 'test';
var x = stringVar.indexOf('test') > -1;

基本上,indexOf将返回字符串中字符串起始位置的索引,如果它找不到它将返回-1。

reference

所以对于你的问题,你可以这样。

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());