2016-04-22 22 views
0

私は入力フィールドを持っており、ユーザーがSQLインジェクションのような文字列をサブミットできないようにする妥当性チェックを行いたいと思います。これはJavaScriptでどのように行われますか?配列に含まれる文字列の検索文字列

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

ここで、配列arrayCheckの一致数をuserInputで確認する必要があります。

一致する数が3以上の場合はfalseを返し、そうでない場合はtrueを返してください。

+1

これは適切な方法ではありません。 UXを邪魔するでしょう。 'mysqli_real_escape_string'のようなものが役に立ちます!ユーザーがショッピングモールのどこに入力したいのですか?そこから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 

は注意してください例で、私は小文字または大文字することをお勧めしますので、あなたは言葉を一致させることができませんでした文字列全体。フィルタの内部:

関連する問題