Avatar billede hnteknik Novice
25. maj 2008 - 23:04 Der er 16 kommentarer og
1 løsning

JSCRIPT til at luften ud af SQL Injection

Jeg har lavet et par funktioner til at fange noget af den SQL injection, der florerer for tiden. Jeg har forsøgt at lave tilsvarende funktioner i Jscript med mindre held. Jeg har illustreret funktionerne i et test java script:


<script type="text/javascript">

//sikrer mod SQL injections tror vi -  hen 2008
var teststr ="Æv2=3BUNIONæv'1=1union";
var teststr2 ="27";

document.write(  teststr +"<br />" + "<br />");
document.write(  teststr2 +"<br />" + "<br />");
document.write( "<br />" + killCharsJS(teststr) + "<br />");
//document.write( "<br />" + killNonNumJS(teststr2, 21) + "<br />");
document.write( "<br />" + isNumeric("21") + "<br />");

function killCharsJS(strWords) {
    var badChars = new Array();
        badChars[0] = /scr/gi;
        badChars[1] = /qscript/gi;
        badChars[2] = /qscript>/gi;
        badChars[3] = /select/gi;
        badChars[4] = /union/gi;
        badChars[5] = /drop/gi;
        badChars[6] = /=/gi;
        badChars[7] = /;/gi;
        badChars[8] = /--/gi;
        badChars[9] = /insert/gi;
        badChars[10] =/delete/gi;
        badChars[11] =/update/gi;
        badChars[12] =/xp_/gi;

        var newChars = strWords;
        var re;    var i

    for (i in badChars)
        {
        re = badChars[i];
        document.write(re + "<br />");
        newChars = newChars.replace(re, "");
        }
        re =/'/g;
        newChars = newChars.replace(re, "''") ;
return(newChars);        
}

function killNonNumJS(strNumber,normal) {

    if(strNumber != "" && isNumeric(strNumber)) {
        return( strNumber)}
    else {
        return(normal)
    }
}

function isNumeric(vTestValue)
{
    // put the TEST value into a string object variable
    var sField = new String(Trim(vTestValue));
   
    // check for a length of 0 - if so, return false
    if(sField.length==0) { return false; }
    else if(sField.length==1 && (sField.charAt(0) == '.' || sField.charAt(0) == ',' || (sField.charAt(0) == '-'))) { return false; }
   
    // loop through each character of the string
    for(var x=0; x < sField.length; x++) {
        // if the character is < 0 or > 9, return false (not a number)
        if((sField.charAt(x) >= '0' && sField.charAt(x) <= '9') || sField.charAt(x) == '.' || sField.charAt(x) == ',' || (sField.charAt(x) == '-' && x==0)) { /* do nothing */ }
        else { return false; }
    }
   
    // made it through the loop - we have a number
    return true;
}
</script>

Jscript klager et - ikke er script i et script, hvis jeg forsøger at medtage script i søge array. IsNomeric virker ikke.

Hvad skal der til for at få det til at virke på serveren?
Avatar billede erikjacobsen Ekspert
25. maj 2008 - 23:14 #1
Du kan intet gøre mod sqlinjections med javascript i browseren
Avatar billede erikjacobsen Ekspert
25. maj 2008 - 23:16 #2
Og det er så heller ikke det du gør ;)

Men det er slet, slet, slet ikke nødvendigt at gøre så umådeligt besværligt. Jeg formoder du bruger ASP med Jscript? Løsning er, har altid været, vil altid være at bruge parameters (prepared statements), som selv gammeldags ASP understøtter.
Avatar billede erikjacobsen Ekspert
25. maj 2008 - 23:23 #3
Nå, det kan være svært at finde på Google. Prøv: adodb asp prevent sql injection
Det er selvfølgelig hverken ASP eller JScript eller VBScript, der gør det, men ADODB.
Den her viser vist princippet: http://kb.adobe.com/selfservice/viewContent.do?externalId=581a553c
(du skal ned til noget med ...parameters.append...)
Avatar billede hnteknik Novice
26. maj 2008 - 08:45 #4
Det er rigtig nok. Men man laver ikke blot en gammel site om. Mangler lige at sikre 3 sider i Jscript. ed er inde bag et medlems login men alligevel.
Avatar billede erikjacobsen Ekspert
26. maj 2008 - 09:03 #5
Er det så ikke bare "fattigmands-metoden": erstat een ' med '' i alle tekststrenge, og lave et "tal-tjek" på talfelter. Det er vel realistisk hvis du har en:

  sql = "update tabellen set navn='" + navn + "' where id=' + id;
Avatar billede hnteknik Novice
26. maj 2008 - 09:12 #6
Jo det er et, som jeg er i gang med men jeg vil lave en generel ting som også fanger det som kan lægges ind via forms.
Avatar billede erikjacobsen Ekspert
26. maj 2008 - 09:21 #7
Så er du vel igang med mere end sql-injection? Du vil sørge for at man ikke kan skrive fx "drop" i et felt, selv om det på ingen måde er farligt?

Det kan måske være en god idé at lave en form for analyse, der kan advisere dig om at nogen er i gang med et "angreb". Men det bør vel ikke automatisk fjerne ting.
Avatar billede hnteknik Novice
26. maj 2008 - 10:33 #8
Erik - dette er ikke det rigtige sted for en diskussion om hvad og hvor og hvordan.
Jeg er på vej til Holland og havde håbet på en teknisk tilbagemelding på noget JS som kører i VB inden jeg dampede af. SUK.

Drop af en medlemsliste er da 'farligt' for dem der har brug for den ;-)
Avatar billede erikjacobsen Ekspert
26. maj 2008 - 11:14 #9
Så må du forklare dig bedre. Hvad mener du med: "Jscript klager et - ikke er script i et script, hvis jeg forsøger at medtage script i søge array. IsNomeric virker ikke." ?

Drop er totalt ufarligt, hvis du har lavet de nødvendige sql-tekniske ting mod injection. Det er vel mere et problem hvis brugerne ikke må bruge ordet i et felt.
Avatar billede olebole Juniormester
26. maj 2008 - 21:45 #10
<ole>

"dette er ikke det rigtige sted for en diskussion om hvad og hvor og hvordan." >> Så er det vel heller ikke stedet at søge info. At få informationer kræver, man i det mindste forklarer, hvad det er, man søger info om ... og det kan ikke gøres i 'luftige' vendinger, når emnet er programmering  =)

/mvh
</bole>
Avatar billede hnteknik Novice
27. maj 2008 - 20:43 #11
Ole

Det er netop programmering. Hvorfor virker IsNumeric ikke ? og hvorfor må man ikke søge efter <script> i JS men ok i VB. Det er squ da meget konkret. Jeg har endda leveret koden som fejler.
Avatar billede erikjacobsen Ekspert
27. maj 2008 - 21:31 #12
Nej, det er ikke klart hvad du mener. Du får fejlen på isNumeric, at Trim ikke findes. Så er det jo nok derfor.
Avatar billede olebole Juniormester
27. maj 2008 - 21:33 #13
Jamen, fejlmeldingerne i din browser fortæller dig vel, hvorfor isNumeric ikke fungerer. Hvis ikke du har defineret en funktion, der hedder 'trim', er det vel ikke så underligt  =)

Du må ikke bruge specialtegn i JavaScript. Derfor burde du slet ikke overveje at skrve '<script>' med JS:
    http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Literals#Using_Special_Characters_in_Strings
Avatar billede olebole Juniormester
27. maj 2008 - 21:34 #14
- og som Erik anfører, står din mening vist kun klart for dig  =)
Avatar billede hnteknik Novice
27. maj 2008 - 21:53 #15
Jeg tror vi lukker her. E rder nogen af jer, der vil have point for jeres indsats ?
Avatar billede olebole Juniormester
27. maj 2008 - 21:55 #16
Ikke når tråden ikke tages alvorlig ... det her ligner spild af tid
Avatar billede erikjacobsen Ekspert
27. maj 2008 - 22:18 #17
Jeg samler ikke på point, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester