2016-04-22 78 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 

要小心,你無法匹配,因爲案件的話,我會建議以大寫或小寫整個字符串。裏面的過濾器:

相關問題