<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlserver.ro/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Diverse</title><link>http://sqlserver.ro/forums/27/ShowForum.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>SQL Injection - tips</title><link>http://sqlserver.ro/forums/thread/191.aspx</link><pubDate>Thu, 28 Sep 2006 10:00:39 GMT</pubDate><guid isPermaLink="false">963f3a18-65dd-4aad-905c-b785cfe1d7c7:191</guid><dc:creator>xmldeveloper</dc:creator><slash:comments>0</slash:comments><comments>http://sqlserver.ro/forums/thread/191.aspx</comments><wfw:commentRss>http://sqlserver.ro/forums/commentrss.aspx?SectionID=27&amp;PostID=191</wfw:commentRss><description>&lt;P&gt;Daca va intereseaza subiectul stiti deja ca o masura contra SQL Injection este validarea a "user input".&lt;/P&gt;
&lt;P&gt;Validarea parametrilor de intrare poate fi realizata prin mai multe metode printre care:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Stabilirea caracterelor permise pentru parametrii de input si respingerea input-ului care nu corespunde. 
&lt;LI&gt;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).&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;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&amp;nbsp;cand lista cu ce nu este acceptabil modificandu-se mereu.&lt;/P&gt;
&lt;P&gt;Urmatorul exemplu demonstreaza de ce folosirea&amp;nbsp;celei de a doua metode nu este eficienta:&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sa presupunem ca lista &lt;STRONG&gt;neagra&lt;/STRONG&gt; cu parametrii de intrare contine functia @@VERSION. Un exemplu de parametru de intrare interzis ar fi 'SELECT @@VERSION'.&lt;/P&gt;
&lt;P&gt;Ce spuneti insa despre 0x53454C45435420404056455253494F4E? La prima vedere nu prea seamna cu @@VERSION. Haideti sa rulam urmatorul cod:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;STRONG&gt;DECLARE @sql VARCHAR(8000)&lt;BR&gt;SELECT @sql = 0x53454C45435420404056455253494F4E&lt;BR&gt;EXEC(@sql);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;&lt;STRONG&gt;-- Output on my computer&lt;BR&gt;Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86)&amp;nbsp;&amp;nbsp; Apr 14 2006 01:12:25&amp;nbsp;&amp;nbsp; Copyright (c) 1988-2005 Microsoft Corporation&amp;nbsp; Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 2) &lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT face="Times New Roman" size=3&gt;Interesant nu? Ca sa vedem ce este in spatele lui 0x53454C45435420404056455253494F4E avem o metoda simpla:&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" color=#000000 size=2&gt;&lt;STRONG&gt;DECLARE @sql VARCHAR(8000)&lt;BR&gt;SELECT @sql = 0x53454C45435420404056455253494F4E&lt;BR&gt;SELECT CAST(@sql as VARCHAR);&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;&lt;FONT color=#000000&gt;&lt;STRONG&gt;-- Output&lt;BR&gt;SELECT @@VERSION&lt;/STRONG&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;0x53454C45435420404056455253494F4E este reprezentarea hexa a sirului de caractere 'SELECT @@VERSION'.&lt;/P&gt;
&lt;P&gt;Oricum, orice metoda de validare folositi, este mult mai eficienta decat lipsa completa a validarii.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>