Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Возвращаясь к sql-иньекциям

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Возвращаясь к sql-иньекциям
Имя
Сообщение << Старые топики   Новые топики >>
Возвращаясь к sql-иньекциям - 2006-05-21 18:27:56   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Люди, подскажите код, как вы фильтруете переменные перед внесением в БД MySQL и при выводе на экран из базы.

буду очень благодарен.
Post #: 1
Возвращаясь к sql-иньекциям - 2006-05-21 18:35:43   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
Чтонить вроде этого
<BR>&lt;?php<BR><BR><BR>if (isset($_GET))<BR> {<BR><BR>$cp = &quot;\\&quot; . &quot;\\&quot;;<BR>$trans = array('\&quot;' =&gt; &quot;&quot;,<BR> &quot;\'&quot; =&gt; &quot;&quot;,<BR> &quot;{&quot; =&gt; &quot;&quot;,<BR> &quot;}&quot; =&gt; &quot;&quot;,<BR> &quot;;&quot; =&gt; &quot;&quot;,<BR> &quot;#&quot; =&gt; &quot;&quot;,<BR> '/' =&gt; &quot;&quot;,<BR> &quot;%2527&quot; =&gt; &quot;&quot;,<BR> &quot;%27&quot; =&gt; &quot;&quot;,<BR> &quot;$&quot; =&gt; &quot;&quot;,<BR> &quot;.&quot; =&gt; &quot;&quot;,<BR> &quot;$cp&quot; =&gt; &quot;&quot;,<BR> &quot;http&quot; =&gt; &quot;&quot;,<BR> &quot;ftp&quot; =&gt; &quot;&quot;,<BR> &quot;www&quot; =&gt; &quot;&quot;,<BR> &quot;://&quot; =&gt; &quot;&quot;,<BR> &quot;pass&quot; =&gt; &quot;&quot;,<BR> &quot;pwd&quot; =&gt; &quot;&quot;,<BR> &quot;from&quot; =&gt; &quot;&quot;,<BR> &quot;select&quot; =&gt; &quot;&quot;,<BR> &quot;drop&quot; =&gt; &quot;&quot;,<BR> &quot;where&quot; =&gt; &quot;&quot;,<BR> &quot;order&quot; =&gt; &quot;&quot;,<BR> &quot;alter&quot; =&gt; &quot;&quot;,<BR> &quot;from&quot; =&gt; &quot;&quot;,<BR> &quot;update&quot; =&gt; &quot;&quot;,<BR> &quot;FROM&quot; =&gt; &quot;&quot;,<BR> &quot;SELECT&quot; =&gt; &quot;&quot;,<BR> &quot;DROP&quot; =&gt; &quot;&quot;,<BR> &quot;WHERE&quot; =&gt; &quot;&quot;,<BR> &quot;ORDER&quot; =&gt; &quot;&quot;,<BR> &quot;ALTER&quot; =&gt; &quot;&quot;,<BR> &quot;FROM&quot; =&gt; &quot;&quot;,<BR> &quot;UPDATE&quot; =&gt; &quot;&quot;<BR> );<BR><BR><BR>while ($foo = current($_GET))<BR> {<BR> $_GET[key($_GET)] = strtr($_GET[key($_GET)], $trans);<BR> next($_GET);<BR> }<BR><BR> }<BR><BR>?&gt;<BR>
Post #: 2
Возвращаясь к sql-иньекциям - 2006-05-21 18:39:29   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
А это не тоже, что и str_replace[sm=12.gif]
Post #: 3
Возвращаясь к sql-иньекциям - 2006-05-21 18:49:46   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Пасибо, понял. Не тоже.

А ещё у кого какие варианты есть?

З.Ы. а такая обработка не сказывается на роботоспособность сайта?
Post #: 4
Возвращаясь к sql-иньекциям - 2006-05-21 18:55:31   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
И ещё вопрос: не будет ли опасно исключить из этого списка символы: $ . ;?
Post #: 5
Возвращаясь к sql-иньекциям - 2006-05-21 19:29:06   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
И ещё вопрос: Как сделать так, что бы если потенциально опасный код был введён, выводилась надпись об этом.

Я пробовал так:

&lt;?php<BR>echo(&quot;&lt;form action=\&quot;test.php\&quot; method=\&quot;post\&quot;&gt;&lt;input type=\&quot;text\&quot; name=\&quot;f1\&quot;&gt;&lt;input type=\&quot;text\&quot; name=\&quot;f2\&quot;&gt;&lt;input type=\&quot;submit\&quot;&gt;&lt;/form&gt;&quot;);<BR><BR>if (isset($_POST))<BR> {<BR><BR>$cp = &quot;\\&quot; . &quot;\\&quot;;<BR>$trans = array('\&quot;' =&gt; &quot;[dan]&quot;,<BR> &quot;\'&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;{&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;}&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;;&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;#&quot; =&gt; &quot;[dan]&quot;,<BR> '/' =&gt; &quot;[dan]&quot;,<BR> &quot;%2527&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;%27&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;$&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;.&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;$cp&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;http&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;ftp&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;www&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;://&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;pass&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;pwd&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;from&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;select&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;drop&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;where&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;order&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;alter&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;from&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;update&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;FROM&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;SELECT&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;DROP&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;WHERE&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;ORDER&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;ALTER&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;FROM&quot; =&gt; &quot;[dan]&quot;,<BR> &quot;UPDATE&quot; =&gt; &quot;[dan]&quot;<BR> );<BR><BR>$ups=0;<BR>while ($foo = current($_POST))<BR> {<BR> $_POST[key($_POST)] = strtr($_POST[key($_POST)], $trans);<BR> next($_POST);<BR> }<BR><BR> }<BR><BR><BR>$f1=&quot;[dan]&quot;;<BR>$f2=@$_POST['f1'];<BR>$pos = strpos($f2, $f1);<BR><BR>if($pos == false)<BR>{<BR>echo(&quot;&lt;br&gt;&lt;b&gt;В запросе f1 не было опасных кодов.&lt;/b&gt;&lt;br&gt;&quot;);<BR>}<BR>else<BR>{<BR>echo(&quot;&lt;br&gt;&lt;b&gt;В запросе f1 был потенциально опасный код&lt;/b&gt;&lt;br&gt;&quot;);<BR>}<BR><BR>$f2=@$_POST['f2'];<BR>$pos = strpos($f2, $f1);<BR><BR>if($pos == false)<BR>{<BR>echo(&quot;&lt;br&gt;&lt;b&gt;В запросе f2 не было опасных кодов.&lt;/b&gt;&lt;br&gt;&quot;);<BR>}<BR>else<BR>{<BR>echo(&quot;&lt;br&gt;&lt;b&gt;В запросе f2 был потенциально опасный код&lt;/b&gt;&lt;br&gt;&quot;);<BR>}<BR><BR>$g1=@$_POST['f1'];<BR>$g2=@$_POST['f2'];<BR>echo(&quot;$g1 $g2&quot;);<BR>?&gt;<BR>

Но чё-то не пашет[sm=5.gif]
Post #: 6
Возвращаясь к sql-иньекциям - 2006-05-21 19:57:16   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
quote:

—————-<BR>Цитата: Дата:21.05.2006 18:49:46, Автор:QuickShare ::
Пасибо, понял. Не тоже.<BR><BR><BR>А ещё у кого какие варианты есть?<BR><BR><BR>З.Ы. а такая обработка не сказывается на роботоспособность сайта?
—————-


Да нет, не сказывается…
Post #: 7
Возвращаясь к sql-иньекциям - 2006-05-21 19:58:44   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
. ; $ - нет.
Post #: 8
Возвращаясь к sql-иньекциям - 2006-05-21 20:01:20   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
quote:

—————-<BR>Цитата: Дата:21.05.2006 19:29:06, Автор:QuickShare ::
И ещё вопрос: Как сделать так, что бы если потенциально опасный код был введён, выводилась надпись об этом.<BR><BR><BR>Я пробовал так:<BR><BR><BR>&amp;amp;lt;?php<BR><BR>echo(&amp;amp;quot;&amp;amp;lt;form action=&amp;amp;quot;test.php&amp;amp;quot; method=&amp;amp;quot;post&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;input type=&amp;amp;quot;text&amp;amp;quot; name=&amp;amp;quot;f1&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;input type=&amp;amp;quot;text&amp;amp;quot; name=&amp;amp;quot;f2&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;input type=&amp;amp;quot;submit&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;/form&amp;amp;gt;&amp;amp;quot;);<BR><BR><BR>if (isset($_POST))<BR><BR> {<BR><BR><BR>$cp = &amp;amp;quot;\&amp;amp;quot; . &amp;amp;quot;\&amp;amp;quot;;<BR><BR>$trans = array('&amp;amp;quot;' =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;'&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;{&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;}&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;;&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;#&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> '/' =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;%2527&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;%27&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;$&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;.&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;$cp&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;http&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;ftp&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;www&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;://&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;pass&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;pwd&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;from&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;select&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;drop&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;where&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;order&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;alter&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;from&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;update&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;FROM&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;SELECT&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;DROP&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;WHERE&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;ORDER&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;ALTER&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;FROM&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;,<BR><BR> &amp;amp;quot;UPDATE&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;[dan]&amp;amp;quot;<BR><BR> );<BR><BR><BR>$ups=0;<BR><BR>while ($foo = current($_POST))<BR><BR> {<BR><BR> $_POST[key($_POST)] = strtr($_POST[key($_POST)], $trans);<BR><BR> next($_POST);<BR><BR> }<BR><BR><BR> }<BR><BR><BR><BR>$f1=&amp;amp;quot;[dan]&amp;amp;quot;;<BR><BR>$f2=@$_POST['f1'];<BR><BR>$pos = strpos($f2, $f1);<BR><BR><BR>if($pos == false)<BR><BR>{<BR><BR>echo(&amp;amp;quot;&amp;amp;lt;br&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;В запросе f1 не было опасных кодов.&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;quot;);<BR><BR>}<BR><BR>else<BR><BR>{<BR><BR>echo(&amp;amp;quot;&amp;amp;lt;br&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;В запросе f1 был потенциально опасный код&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;quot;);<BR><BR>}<BR><BR><BR>$f2=@$_POST['f2'];<BR><BR>$pos = strpos($f2, $f1);<BR><BR><BR>if($pos == false)<BR><BR>{<BR><BR>echo(&amp;amp;quot;&amp;amp;lt;br&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;В запросе f2 не было опасных кодов.&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;quot;);<BR><BR>}<BR><BR>else<BR><BR>{<BR><BR>echo(&amp;amp;quot;&amp;amp;lt;br&amp;amp;gt;&amp;amp;lt;b&amp;amp;gt;В запросе f2 был потенциально опасный код&amp;amp;lt;/b&amp;amp;gt;&amp;amp;lt;br&amp;amp;gt;&amp;amp;quot;);<BR><BR>}<BR><BR><BR>$g1=@$_POST['f1'];<BR><BR>$g2=@$_POST['f2'];<BR><BR>echo(&amp;amp;quot;$g1 $g2&amp;amp;quot;);<BR><BR>?&amp;amp;gt;<BR><BR><BR><BR><BR>Но чё-то не пашет[sm=5.gif]
—————-


Попробуй вместо strpos() юзать preg_match() или eregi().
Post #: 9
Возвращаясь к sql-иньекциям - 2006-05-21 20:09:38   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
quote:

—————-<BR>Цитата: Дата:21.05.2006 18:35:43, Автор:.:[ksuri]:. ::
Чтонить вроде этого<BR><BR><BR><BR>&amp;amp;lt;?php<BR><BR><BR><BR>if (isset($_GET))<BR><BR> {<BR><BR><BR>$cp = &amp;amp;quot;\&amp;amp;quot; . &amp;amp;quot;\&amp;amp;quot;;<BR><BR>$trans = array('&amp;amp;quot;' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;'&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;{&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;}&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;;&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;#&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> '/' =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;%2527&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;%27&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;$&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;.&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;$cp&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;http&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;ftp&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;www&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;://&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;pass&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;pwd&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;from&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;select&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;drop&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;where&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;order&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;alter&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;from&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;update&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;FROM&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;SELECT&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;DROP&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;WHERE&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;ORDER&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;ALTER&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;FROM&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;,<BR><BR> &amp;amp;quot;UPDATE&amp;amp;quot; =&amp;amp;gt; &amp;amp;quot;&amp;amp;quot;<BR><BR> );<BR><BR><BR><BR>while ($foo = current($_GET))<BR><BR> {<BR><BR> $_GET[key($_GET)] = strtr($_GET[key($_GET)], $trans);<BR><BR> next($_GET);<BR><BR> }<BR><BR><BR> }<BR><BR><BR>?&amp;amp;gt;<BR><BR>
—————-


Пипец маразм……….
А если я напишу sElEct? Твой код благополучно отправится коту под хвост?
И что, $_GET мы фильтруем, а $_POST уже не надо?
А если в POST будет текст, в котором ничего не подозревающий юзер напишет "Hello I'm recently coming from Brasilia where too many wild monkeys"??
Я уж не говорю, какие проблемы это привнесёт при необходимости возврата данных веб-форм. В общем, ИМХО, автор это только что сам придумал, и на практике (надеюсь) ни разу не использовал.
Post #: 10
Возвращаясь к sql-иньекциям - 2006-05-21 20:59:03   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Lex, а ты чего посоветуешь?

Я искал во всяких статьях, но везде написано что-нибудь типа: "про то, как защититься от sql-инъекций статей написано немало. А вот мы поговорим о том, как дро**** правильно используя БД" и от статьи только одно название осталось…
Post #: 11
Возвращаясь к sql-иньекциям - 2006-05-21 21:18:16   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

—————-<BR>Цитата: Дата:21.05.2006 20:59:03, Автор:QuickShare ::
Lex, а ты чего посоветуешь?<BR><BR>Я искал во всяких статьях, но везде написано что-нибудь типа: &amp;amp;quot;про то, как защититься от sql-инъекций статей написано немало. А вот мы поговорим о том, как дро**** правильно используя БД&amp;amp;quot; и от статьи только одно название осталось…
—————-


написать свой PHP в котором будут ключевые слова `select', `insert`, `update`, `where`, `union`… короче, чтобы синтаксис sql был бы подмножеством этого языка. Ну и ещё, неплохо было бы добавить в этот язык синтаксис a la html, чтобы интерпретатор/компилятор, мог бы знать что надо esc'апить, а что нет.
[sm=2.gif]
Post #: 12
Возвращаясь к sql-иньекциям - 2006-05-21 21:28:06   
Сhaos_Сode

Сообщений: 1049
Оценки: 0
Присоединился: 2006-01-12 11:54:12
А не достаточно ли просто грамотно составлять запросы типа

$query = "select user, passhash from users where id = '$id'";

т.е заключать в кавычки
а сам код выглядит так

$id = str_replace('(', ', $id);
$id = addslashes($id); // или $id = htmlspecialchars($id, ENT_QUOTES);

$result = mysql_query($query);
if(!$result)
{
header('1осаtiоn: index.php') || die('incorrect query');
}

Я думаю, что этого вполне хватит или я не прав?

Можно ввести дополнительные проверки типа

if(!is_numeric($id)) die('Incorrect value');
Post #: 13
Возвращаясь к sql-иньекциям - 2006-05-21 21:34:54   
Сhaos_Сode

Сообщений: 1049
Оценки: 0
Присоединился: 2006-01-12 11:54:12
quote:

—————-<BR>Цитата: Дата:21.05.2006 21:18:16, Автор:rgo ::
quote:

—————-<BR><BR>Цитата: Дата:21.05.2006 20:59:03, Автор:QuickShare ::
Lex, а ты чего посоветуешь?<BR><BR><BR>Я искал во всяких статьях, но везде написано что-нибудь типа: &amp;amp;amp;amp;quot;про то, как защититься от sql-инъекций статей написано немало. А вот мы поговорим о том, как дро**** правильно используя БД&amp;amp;amp;amp;quot; и от статьи только одно название осталось…
—————-

<BR><BR>написать свой PHP в котором будут ключевые слова `select', `insert`, `update`, `where`, `union`… короче, чтобы синтаксис sql был бы подмножеством этого языка. Ну и ещё, неплохо было бы добавить в этот язык синтаксис a la html, чтобы интерпретатор/компилятор, мог бы знать что надо esc'апить, а что нет.<BR><BR>[sm=2.gif]
—————-



Тоже маразм

Ну если на то пошло, то хватит исключения union, = и круглых скобок

остальные символы уберет htmlspecialchars( или addslashes) плюс грамотные запросы

Чуть не забыл про '%' =)
Post #: 14
Возвращаясь к sql-иньекциям - 2006-05-21 21:51:22   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
quote:

—————-<BR>Цитата: Дата:21.05.2006 20:09:38, Автор:Lex_Voodoo ::
quote:

—————-<BR><BR>Цитата: Дата:21.05.2006 18:35:43, Автор:.:[ksuri]:. ::
Чтонить вроде этого<BR><BR><BR><BR><BR><BR>&amp;amp;amp;amp;lt;?php<BR><BR><BR><BR><BR>if (isset($_GET))<BR><BR><BR> {<BR><BR><BR><BR>$cp = &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot; . &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;;<BR><BR><BR>$trans = array('&amp;amp;amp;amp;quot;' =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;'&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;{&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;}&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;;&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;#&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> '/' =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;%2527&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;%27&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;$&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;.&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;$cp&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;http&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;ftp&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;www&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;://&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;pass&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;pwd&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;from&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;select&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;drop&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;where&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;order&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;alter&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;from&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;update&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;FROM&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;SELECT&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;DROP&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;WHERE&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;ORDER&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;ALTER&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;FROM&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;,<BR><BR><BR> &amp;amp;amp;amp;quot;UPDATE&amp;amp;amp;amp;quot; =&amp;amp;amp;amp;gt; &amp;amp;amp;amp;quot;&amp;amp;amp;amp;quot;<BR><BR><BR> );<BR><BR><BR><BR><BR>while ($foo = current($_GET))<BR><BR><BR> {<BR><BR><BR> $_GET[key($_GET)] = strtr($_GET[key($_GET)], $trans);<BR><BR><BR> next($_GET);<BR><BR><BR> }<BR><BR><BR><BR> }<BR><BR><BR><BR>?&amp;amp;amp;amp;gt;<BR><BR><BR>
—————-

<BR><BR>Пипец маразм……….<BR><BR>А если я напишу sElEct? Твой код благополучно отправится коту под хвост?<BR><BR>И что, $_GET мы фильтруем, а $_POST уже не надо?<BR><BR>А если в POST будет текст, в котором ничего не подозревающий юзер напишет &amp;amp;quot;Hello I'm recently coming from Brasilia where too many wild monkeys&amp;amp;quot;??<BR><BR>Я уж не говорю, какие проблемы это привнесёт при необходимости возврата данных веб-форм. В общем, ИМХО, автор это только что сам придумал, и на практике (надеюсь) ни разу не использовал.
—————-


Это кусок исходника сайта www.nashi.su [sm=9.gif]
А ваще это вариант - переменные можно какие угодно оттуда убрать и добавить…
Post #: 15
Возвращаясь к sql-иньекциям - 2006-05-21 22:01:55   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
quote:

—————-<BR>Цитата: Дата:21.05.2006 20:59:03, Автор:QuickShare ::
Lex, а ты чего посоветуешь?<BR><BR><BR>Я искал во всяких статьях, но везде написано что-нибудь типа: &amp;amp;quot;про то, как защититься от sql-инъекций статей написано немало. А вот мы поговорим о том, как дро**** правильно используя БД&amp;amp;quot; и от статьи только одно название осталось…
—————-


Потому что действительно написано немало. Только на этом форуме я раза три расписывал.
1) по возможности не использовать динамический контент на основе данных пользователя. Т.е. заменять по возможности $month = $_GET['month'] на switch($_GET['month']){…}

2) Следить за типами данных. Например, элементарнейшая конструкция: $id = (int)$_GET['id']. В случае, когда $_GET['id'] будет равно 7' в $id останется 7.

3) Квотить ВСЕ приходящие данные ВО ВСЕХ запросах: $sql = "SELECT * FROM t WHERE id = " . mysql_real_escape_string($id);

В принципе, 1) и 3) достаточно.
Post #: 16
Возвращаясь к sql-иньекциям - 2006-05-21 22:29:16   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Лекс, умоляю, по-подробнее 1 и 3!
—-
Чем отличается
$month = $_GET['month'] от switch($_GET['month']){…}и что должно стоять в фигурных скобках?
что делает функция switch и как потом с нейю дальше работать?
если в $month = $_GET['month'] мне надо, например, сделать так: echo($month); для вывода на экран, то как это сделать после обработки ф-ией switch?

$sql = &quot;SELECT * FROM t WHERE id = &quot; . mysql_real_escape_string($id);
что делает mysql_real_escape_string();?
и почему строка $sql = &quot;SELECT * FROM t WHERE id = &quot; . не до конца дописана?
Post #: 17
Возвращаясь к sql-иньекциям - 2006-05-21 22:57:33   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

—————-<BR>Цитата: Дата:21.05.2006 21:34:54, Автор:#chaos_coder# ::
quote:

—————-<BR><BR>Цитата: Дата:21.05.2006 21:18:16, Автор:rgo ::
<BR>написать свой PHP в котором будут ключевые слова `select', `insert`, `update`, `where`, `union`… короче, чтобы синтаксис sql был бы подмножеством этого языка. Ну и ещё, неплохо было бы добавить в этот язык синтаксис a la html, чтобы интерпретатор/компилятор, мог бы знать что надо esc'апить, а что нет.<BR>[sm=2.gif]
—————-

<BR><BR>Тоже маразм<BR>
—————-


почему же? например, как это могло бы выглядеть:


sqlclass my_record
{
unsigned int(32) id as primary key;
string(25) name;
string(35) password;
string(255) email;
}; /* и пускай интерпретатор вникает в то как, на каком sql движке, лучше определить таблицу */

sql::connect (<всякие опции>);

my_record::create_table ("my_table");
my_record new_rec;

new_rec.name = "имя";
new_rec.password = "пароль";
new_rec.email = "мыло@сервер.зона";
new_rec.table_name = "my_table";

sql::with_transaction {
int id = 1 + sql::select sql::max (my_record::id) sql::from "my_table"
sql::update_table(new_rec);

new_rec = sql::select my_record sql::from "my_table"
where name = "имя";
new_rec.email = "новое@мыло.где-то";
sql::update_table (new_rec);


а если вспомнить про хтмл, то, вот ещё пример, с тем же классом:

using namespace sql;
my_record records = select my_record from "my table"
where my_record::id > 10;
:html {
:head {
:meta (:http-equiv "Content-Type", :content "text/html; charset=koi8-r");
:title {"Тестовая страничка"}
}
:body {
:table {
:tr {
:td {"id"} :td {"name"} :td {"email"}
}
foreach rec in records {
:tr {
:td {rec.id} :td {rec.name} :td {rec.email}
}
}
}
}
}


и всё экранирование спец символов может производиться интерпретатором.

да проблемы будут: всякие жабаскрипты например, хотелось бы вставлять в html напрямую, и тупое экранирование тегов там, может неправильно сказаться. Но, тем не менее, 90% случаев можно свалить на интерпретатор, а в остальные 10% решаются за счёт, чего-нибудь в стиле inline-html. напр:

:inline-html {
<тег No="1">контент</тег>
<тег No="2">контент</тег>
}

может и не самая удачная идея — тут я спорить не буду, но ведь не маразм? вполне себе идейка, вместо того чтобы приспосабливать C++ к генерации дин.контента, создавая пхп, создать язык-помесь SQL+HTML изначально ориентированный на генерацию html'я на основе данных из sql. избавляя тем самым программера от кучи вызовов htmlspecialchars, preg_replace и пр.
Post #: 18
Возвращаясь к sql-иньекциям - 2006-05-22 00:00:15   
cybermind

Сообщений: 805
Оценки: 0
Присоединился: 2004-05-24 20:16:13
что делает mysql_real_escape_string();?

Читать: http://www.php.net/mysql_real_escape_string

Там же есть гениальная функция:

function quote_smart($value)<BR>{<BR> // Stripslashes<BR> if (get_magic_quotes_gpc()) {<BR> $value = stripslashes($value);<BR> }<BR> // Quote if not a number or a numeric string<BR> if (!is_numeric($value)) {<BR> $value = &quot;'&quot; . mysql_real_escape_string($value) . &quot;'&quot;;<BR> }<BR> return $value;<BR>}

Я выношу её в отдельный модуль, который подключаю в каждую свою программу.
А запрос твой будет выглядеть так:
$sql = "SELECT * FROM t WHERE id = " . quote_smart($id);

почему строка $sql = &quot;SELECT * FROM t WHERE id = &quot; . не до конца дописана?
[sm=9.gif]
туда дописывается результат функции: то есть профильтрованный id.
Post #: 19
Возвращаясь к sql-иньекциям - 2006-05-22 00:06:02   
cybermind

Сообщений: 805
Оценки: 0
Присоединился: 2004-05-24 20:16:13
quote:

—————-<BR>что делает функция switch и как потом с нейю дальше работать?<BR><BR>если в $month = $_GET['month'] мне надо, например, сделать так: echo($month); для вывода на экран, то как это сделать после обработки ф-ией switch?<BR>



switch - это не функция, а конструкция языка.
switch ($_GET['month'])
{
case 'январь': case 'февраль': case 'март': case 'апрель': case 'май': case 'июнь': case 'июль': case 'август': case 'сентябрь': case 'октябрь': case 'ноябрь': case 'декабрь': echo $_GET['month']; break;
case default: echo 'bad month';
}
Соответственно, поможет она только в том случае, если есть возможность рассмотреть все варианты переданной переменной. Иначе остаётся только фильтровать функцией, о которой было рассказано выше.
Post #: 20
Возвращаясь к sql-иньекциям - 2006-05-22 00:07:57   
cybermind

Сообщений: 805
Оценки: 0
Присоединился: 2004-05-24 20:16:13
quote:

—————-<BR>&#1069;то кусок исходника сайта www.nashi.su



да ладно?
Post #: 21
Возвращаясь к sql-иньекциям - 2006-05-22 12:48:27   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Так, с 3 пунктом разобрались - спасибо Lex'у и cybermind'y

А со switch'ем можно ещё раз для тупых?
Post #: 22
Возвращаясь к sql-иньекциям - 2006-05-22 13:19:49   
AL

Сообщений: 515
Оценки: 0
Присоединился: 2004-07-19 03:19:44
вот
Post #: 23
Возвращаясь к sql-иньекциям - 2006-05-22 14:05:48   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
quote:

—————-<BR>Цитата: Дата:22.05.2006 0:07:57, Автор:cybermind ::
quote:

—————-<BR><BR>&amp;amp;#1069;то кусок исходника сайта www.nashi.su

<BR><BR><BR>да ладно?
—————-


Да правда [sm=2.gif]
Post #: 24
Возвращаясь к sql-иньекциям - 2006-05-22 17:30:37   
cybermind

Сообщений: 805
Оценки: 0
Присоединился: 2004-05-24 20:16:13
quote:

—————-<BR>Цитата: Дата:22.05.2006 14:05:48, Автор:.:[ksuri]:. ::
quote:

—————-<BR><BR>Цитата: Дата:22.05.2006 0:07:57, Автор:cybermind ::
quote:

—————-<BR><BR><BR>&amp;amp;amp;amp;#1069;то кусок исходника сайта www.nashi.su

<BR><BR><BR><BR>да ладно?
—————-

<BR><BR>Да правда [sm=2.gif]
—————-



А откуда у тебя этот код?
Может ещё что-нибудь интересного?
Надо будет покопаться там на днях =)
Post #: 25
Возвращаясь к sql-иньекциям - 2006-05-22 18:24:36   
.:[ksuri]:.

Сообщений: 216
Оценки: 0
Присоединился: 2005-04-17 23:52:52
А все-то тебе расскажи, какой любопытный [sm=nonodyad.gif]
Я не хочу чтобы этот сайт ломали… [sm=16.gif]
Post #: 26
Возвращаясь к sql-иньекциям - 2006-05-22 20:59:42   
Lex_Voodoo

Сообщений: 7328
Оценки: 0
Присоединился: 2004-12-07 13:55:12
quote:

—————-<BR>Цитата: Дата:22.05.2006 12:48:27, Автор:QuickShare ::
Так, с 3 пунктом разобрались - спасибо Lex'у и cybermind'y<BR><BR><BR>А со switch'ем можно ещё раз для тупых?
—————-


Смысл в том, что если месяцев всего 12, нет смысла передавать id месяца через GET. Можно передавать …ru/index.php?month=january

Тогда в коде:
switch(month) {
case "january":
$month = 1;
break;

case "february":
$month = 2;
break;
………………
default:
$month = date("n");
break;
}

Конкретно этот пример, конечно же, искусственный. Но есть случаи, когда это бывает действительно полезно.
Post #: 27
Возвращаясь к sql-иньекциям - 2006-05-22 22:35:56   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
А почему тогда не сделать так:

if(@$_GET['month']=='january'){<BR>$month = 1<BR>}

???
Post #: 28
Возвращаясь к sql-иньекциям - 2006-05-23 18:27:53   
cybermind

Сообщений: 805
Оценки: 0
Присоединился: 2004-05-24 20:16:13
quote:

—————-<BR>Цитата: Дата:22.05.2006 22:35:56, Автор:QuickShare ::
А почему тогда не сделать так:<BR><BR><BR>if(@$_GET['month']=='january'){<BR><BR>$month = 1<BR><BR>}<BR><BR><BR>???
—————-



Потому что! Ты что, собираешься 12 условий писать?
Post #: 29
Возвращаясь к sql-иньекциям - 2006-05-23 19:45:13   
MrBlack

Сообщений: 268
Оценки: 0
Присоединился: 2004-05-24 00:02:27
Для строковых параметров достаточно запрещать кавычки, причем, только тот вид кавычек, который используется в запросах, а для чисел - разрешать только цифры и точки.

А чтобы фильтрация совсем никак не сказалась на работоспособности сайта, т. е. разрешала использовать в строковых параметрах даже кавычки, надо не фильтровать, а обрабатывать строки одной из функций mysql_escape, mysql_real_escape, addslashes или quotemeta, а числа - intval.
Post #: 30
Возвращаясь к sql-иньекциям - 2006-05-23 19:48:22   
MrBlack

Сообщений: 268
Оценки: 0
Присоединился: 2004-05-24 00:02:27
Вообще жаль, что в MySql нет такой фишки, как параметризованные запросы. Это бы разом решило все проблемы с инъекциями. Вот в Sqlite и то есть параметризованные запросы, а в MySql почему-то до сих пор нет.
Post #: 31
Возвращаясь к sql-иньекциям - 2006-05-24 17:41:07   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
А как в переменной оставить только числа?

Или если пользователь введёт текст или текст+числа выдавалась бы ошибка.
Post #: 32
Возвращаясь к sql-иньекциям - 2006-05-25 15:44:46   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Так.
Мне надо сделать так:

function quote_smart($id)<BR>{<BR> // Stripslashes<BR> if (get_magic_quotes_gpc()) {<BR> $id = stripslashes($id);<BR> }<BR> // Quote if not a number or a numeric string<BR> if (!is_numeric($id)) {<BR> $id = &quot;'&quot; . mysql_real_escape_string($id) . &quot;'&quot;;<BR> }<BR> return $id;<BR>}<BR>

А за тем составить запрос:
$sql = &quot;SELECT * FROM t WHERE id = '$id'&quot;;
Или всёравно надо писать
$sql = &quot;SELECT * FROM t WHERE id = &quot; . quote_smart($id);
Post #: 33
Возвращаясь к sql-иньекциям - 2006-05-25 16:28:37   
MrBlack

Сообщений: 268
Оценки: 0
Присоединился: 2004-05-24 00:02:27
Ничто не мешает рассматривать все параметры как строки. МуСкул умеет преобразовывать типы. И пусть он сам проверяет, число там или нет. Только это замедлит работу МуСкула
Post #: 34
Возвращаясь к sql-иньекциям - 2006-05-25 16:43:17   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Я так и не понял, этого:

$id=@$_GET['id'];<BR>$query=mysql_query(&quot;SELECT * FROM news WHERE id=&quot;.mysql_real_escape_string($id));<BR>$t=mysql_fetch_row($query);

достатачно, что бы квотить все данные или нет?
Post #: 35
Возвращаясь к sql-иньекциям - 2006-05-25 16:52:17   
MrBlack

Сообщений: 268
Оценки: 0
Присоединился: 2004-05-24 00:02:27
В кавычки их еще поставить надо. Тоесть так:

$query=mysql_query(&quot;SELECT * FROM news WHERE id='&quot;.mysql_real_escape_string($id).&quot;';&quot;);

Post #: 36
Возвращаясь к sql-иньекциям - 2006-05-25 17:03:12   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
пасибо.

а как можно проверить работоспособность этого всего?

Запрос какой специальный сделать?
Post #: 37
Возвращаясь к sql-иньекциям - 2006-05-25 17:16:40   
MrBlack

Сообщений: 268
Оценки: 0
Присоединился: 2004-05-24 00:02:27
Как проверить прогу на безопасность - это вечный вопрос. Иначе бы давно уже никто не выпускал бы софт с багами.

В данном случае важно, как обрабатываются параметры, содержащие:
1) кавычки обоих видов (") и (')
2) слэши
3) нулевые байты
4) ключевые слова SQL
Post #: 38
Возвращаясь к sql-иньекциям - 2006-05-25 17:38:48   
SaBo

Сообщений: 1089
Оценки: 0
Присоединился: 2005-02-17 20:16:54
Вот есть страничка. Я вписывал туда разные кавычки, всё, вроде, работает…

Если не впадло, можешь посмотреть?[sm=12.gif]
Post #: 39
Возвращаясь к sql-иньекциям - 2006-05-27 20:22:27   
MrBlack

Сообщений: 268
Оценки: 0
Присоединился: 2004-05-24 00:02:27
Что тут смотреть-то? На первый взгляд, инъекций нет.
Но не забывай, что на свете существует масса других типов уязвимостей.
Post #: 40
Страниц:  [1] 2
Все форумы >> [Прочее] >> Возвращаясь к sql-иньекциям







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.