Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080

    Classe per sql injection

    Sto sviluppando una classe per prevenire eventuali sql injection.

    Nella mia classe passo la querystring per poterla controllare:

    codice:
        public static string controlloqs(string qs)
        {
    
        object regEx;
        setregEx = new RegExp();
        regEx.Pattern = "banner82|nihaorr1|adw95|xp_|;|--|/\\*|<script|</script|ntext|nchar|nvarchar|alter|begin|create|cursor|" + "declare|delete|drop|exec|execute|fetch|insert|kill|open|sys|sysobjects|syscolumns|table|update|varch" + "ar";
        regEx.IgnoreCase = true;
        regEx.Multiline = true;
        foreach (item in qs) {
        if (regEx.test(qs[item])) {
            Response.redirect(index.aspx);
        }
        }
    
        }
    Compilando però ho errore su

    foreach (item in qs) {
    dove dice:
    Error 1 Type and identifier are both required in a foreach statement

  2. #2
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    UP

  3. #3
    non hai dichiarato di che tipo è la varibile item

    codice:
    foreach(TIPO item in qs)

  4. #4
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Grazie... ma evidentemente ho sbagliato la traduzione da vb a c# da capo a piedi! (strano)

    quello che mi serve è la traduzione di questo codice: http://www.bigthink.it/virus/il-web-...sql-injection/

    codice:
    dim regEx, item
    set regEx = New RegExp
    regEx.Pattern = "banner82|nihaorr1|adw95|xp_|;|--|/\*|<script|</script|ntext|nchar|nvarchar|alter|begin|create|cursor|declare|delete|drop|exec|execute|fetch|insert|kill|open|sys|sysobjects|syscolumns|table|update|varchar"
    regEx.IgnoreCase = true
    regEx.Multiline = true
    For Each item in Request.QueryString
        If regEx.test(Request.QueryString(item)) Then
            Response.redirect "/default.asp"
        End IF
    Next

  5. #5
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    UP

  6. #6
    se la traduzioma noi, non impari.

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da spaceconte
    se la traduziamo noi, non impari.
    Questo è poco, ma sicuro ma oggi mi sento buono (capita di rado )

    codice:
        <form id="form1" runat="server" method="get">
        <div>
            <asp:TextBox ID="TextBox1" runat="server" Width="471px"></asp:TextBox>
    
            <asp:TextBox ID="TextBox2" runat="server" Width="471px"></asp:TextBox>
    
            
    
            <asp:Button ID="Button1" runat="server" Text="Button" />
            
        </div>
        </form>
    codice:
    using System.Text.RegularExpressions;
    
    public partial class prove_c : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string pattern = @"banner82|nihaorr1|adw95|xp_|;|--|/\*|<script|</script|ntext|nchar|nvarchar|alter|begin|create|cursor|declare|delete|drop|exec|execute|fetch|insert|kill|open|sys|sysobjects|syscolumns|table|update|varchar";
            Regex re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
    
            foreach (string f in this.Request.QueryString)
            {
                if (re.IsMatch(this.Request.QueryString[f])) this.Response.Write("Trovata parola pericolosa" + "
    ");
            }
    
        }
    }
    Pietro

  8. #8
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Ho fatto i miei esperimenti e funziona! Bingo!
    Adesso però vorrei fare un passo avanti...

    Tale funzione mi serve per controllare OGNI pagina.
    Pensavo.. creo una classe che richiamo ad ogni page load?

    Ho fatto questa prova:

    codice:
       public static string controlloqs(string qs)
        {
    
            string pattern = @"banner82|nihaorr1|adw95|xp_|;|--|/\*|<script|</script|ntext|nchar|nvarchar|alter|begin|create|cursor|declare|delete|drop|exec|execute|fetch|insert|kill|open|sys|sysobjects|syscolumns|table|update|varchar";
            Regex re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
    
            string vai = "si";
    
            foreach (string f in qs)
            {
                if (re.IsMatch(qs[f]))
                {
                    vai = "no";
                }
            }
    
            return vai;
    
        }
    qs è la mia query string!
    Il problema che su foreach dice: Cannot convert type 'char' to 'string'
    ma che char che sono due string???

    su: qs[f]
    dice: The best overloaded method match for 'string.this[int]' has some invalid arguments
    - Argument '1': cannot convert from 'string' to 'int'
    Ma sto int dove lo vede???

  9. #9
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116


    nella pagina metti, per esempio

    codice:
        protected void Page_Load(object sender, EventArgs e)
        {
            if(gl.controlloqs())
                this.Response.Write("Trovata parola pericolosa" + "
    ");
            
        }
    dentro la directory App_Code fai una classe e metti un metodo
    codice:
        public static bool controlloqs()
        {
            string pattern = @"banner82|nihaorr1|adw95|xp_|;|--|/\*|<script|</script|ntext|nchar|nvarchar|alter|begin|create|cursor|declare|delete|drop|exec|execute|fetch|insert|kill|open|sys|sysobjects|syscolumns|table|update|varchar";
            return controlloqs(pattern);
        }
    
    
        public static bool controlloqs(string pattern)
        {
            bool result = false;
    
            Regex re = new Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
    
            foreach (string f in System.Web.HttpContext.Current.Request.QueryString)
            {
                result = re.IsMatch(System.Web.HttpContext.Current.Request.QueryString[f]);
                if (result) break;
            }
            return result;
        }
    Pietro

  10. #10
    Utente di HTML.it L'avatar di Sonikag
    Registrato dal
    Mar 2004
    Messaggi
    2,080
    Eddai come si fa una classe fino a li c'ero arrivata :P ehh... foreach (string f in System.Web.HttpContext.Current.Request.QueryString ) era più complesso da tradurre!

    Ora adeguo il tutto!
    Grazie come sempre!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.