2016-04-22 76 views
0

我有一个输入字段,我想要做一个验证检查,以防止用户像SQL注入类似的字符串。这将如何在JavaScript中完成?搜索字符串包含在一个数组中的字符串

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

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

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

+1

这不是一个正确的方法!会干扰UX ..就像'mysqli_real_escape_string'会帮助!如果用户想要输入为“WHERE是商场?我想从那里选择10件衬衫” – Rayon

回答

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

我还建议想着也许使用.toLowerCasereference

+0

如何处理多个字符串发生? – mdarmanin

+0

改进了我的回答 –

+0

不错,谢谢! – mdarmanin

0

你可以过滤自己的所有arrayCheck话再算上他们,检查对字符串:

var matches = arrayCheck.filter(function(item){ 
    return userInput.indexOf(item) > -1; 
}); 
var numberOfMatches = matches.length; 
if(numberOfMatches >= 3) 
    //do your thing 

要小心,你无法匹配,因为案件的话,我会建议以大写或小写整个字符串。里面的过滤器:

相关问题