Welcome to Sign in | Help
in Search

SQL Injection - tips

Last post 09-28-2006, 1:00 PM by xmldeveloper. 0 replies.
Sort Posts: Previous Next
  •  09-28-2006, 1:00 PM 191

    SQL Injection - tips

    Daca va intereseaza subiectul stiti deja ca o masura contra SQL Injection este validarea a "user input".

    Validarea parametrilor de intrare poate fi realizata prin mai multe metode printre care:

    1. Stabilirea caracterelor permise pentru parametrii de input si respingerea input-ului care nu corespunde.
    2. Respingerea input-ului cunoscut ca fiind rau intentionat (nume de proceduri stocate extinse: xp_cmdshell, secvente de escape gen --, caractere speciale ca apostroful de exemplu etc).

    Prima varianta este de cele mai multe ori cea mai eficienta deoarece lista cu ce este acceptabil ca parametru pentru o aplicatie, este de cele mai multe ori stabila pe cand lista cu ce nu este acceptabil modificandu-se mereu.

    Urmatorul exemplu demonstreaza de ce folosirea celei de a doua metode nu este eficienta:  

    Sa presupunem ca lista neagra cu parametrii de intrare contine functia @@VERSION. Un exemplu de parametru de intrare interzis ar fi 'SELECT @@VERSION'.

    Ce spuneti insa despre 0x53454C45435420404056455253494F4E? La prima vedere nu prea seamna cu @@VERSION. Haideti sa rulam urmatorul cod:

    DECLARE @sql VARCHAR(8000)
    SELECT @sql = 0x53454C45435420404056455253494F4E
    EXEC(@sql);

    -- Output on my computer
    Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)   Apr 14 2006 01:12:25   Copyright (c) 1988-2005 Microsoft Corporation  Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2)

    Interesant nu? Ca sa vedem ce este in spatele lui 0x53454C45435420404056455253494F4E avem o metoda simpla:  

    DECLARE @sql VARCHAR(8000)
    SELECT @sql = 0x53454C45435420404056455253494F4E
    SELECT CAST(@sql as VARCHAR);

    -- Output
    SELECT @@VERSION

    0x53454C45435420404056455253494F4E este reprezentarea hexa a sirului de caractere 'SELECT @@VERSION'.

    Oricum, orice metoda de validare folositi, este mult mai eficienta decat lipsa completa a validarii.

     

     


    Cristian Andrei Lefter, SQL Server MVP
    MCT, MCSA, MCDBA, MCAD, MCSD .NET,
    MCTS, MCITP - Database Administrator SQL Server 2005
    http://sqlserver.ro
View as RSS news feed in XML
Powered by Community Server (Commercial Edition), by Telligent Systems