2016-04-22 6 views
0

Ich habe ein Eingabefeld und möchte eine Validierungsprüfung durchführen, die verhindert, dass Benutzer SQL Injection-artige Strings unterordnen. Wie würde das in JavaScript gemacht?Suchzeichenfolge für Zeichenfolgen, die in einem Array enthalten sind

So jetzt muss ich userInput für die Anzahl der Übereinstimmungen in der Array-ArrayCheck überprüfen.

Wenn die Anzahl der Übereinstimmungen drei oder höher ist, geben Sie false zurück, andernfalls geben Sie true zurück.

+1

Dies ist kein richtiger Weg! Will stören UX .. Etwas wie mysqli_real_escape_string wird helfen! Was ist, wenn der Benutzer als "WHERE das Einkaufszentrum eingeben möchte? Ich möchte 10 Hemden von dort auswählen" – Rayon

Antwort

1

Sie für Strings in Strings suchen

var stringVar = 'test'; 
var x = stringVar.indexOf('test') > -1; 

Grundsätzlich verwenden, indexOf den Index der Startposition eines Strings in einem String zurück, wenn sie es wird wieder finden kann nicht -1.

reference

Also für Ihr Problem könnte man so etwas wie so.

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

Darf ich vorschlagen, auch mit .toLowerCasereference vielleicht darüber nachzudenken.

+0

Wie wäre es mit mehreren String Vorkommen? – mdarmanin

+0

verbesserte meine Antwort –

+0

Nice one, thanks! – mdarmanin

0

Sie filtern könnte Ihr alle arrayCheck Worte und dann zählen, gegen die Saite Kontrolle:

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

Vorsicht, könnte man die Worte nicht übereinstimmen, weil der Fälle i klein oder groß geschrieben würde empfehlen die gesamte Zeichenfolge. Innerhalb des Filters:

Verwandte Themen