Простите за нубский вопрос про Ещё раз прошу прощения за тупой вопрос, но незнаю как реализовать. Нужно проверять введенные данные пользователя чтобы защетится от SQL-inj Говорю сразу addslashes не предлогать. Так-как по непняной пречине на MSSQL работает очень криво. Подскажите способ как защетится но при учете того что пользователь должен использовать спец символы. ================== Вобщнм принемаю любые варианты решения PS: Язык php. Ладно тогда предложите хороший метод защиты от SQL-inj
Code: [color=#00AA00]$txt[color=#0000FF]=[/COLOR][/COLOR][color=#FFFF00]"Текст Текст Text Text"[/COLOR][color=#00AA00][color=#FF0000];[/COLOR] $txt[color=#0000FF]=[/COLOR][color=#00FF00]str_replace[/COLOR][color=#0000FF]([/COLOR][color=#00FF00]array[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'%'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR][/COLOR][color=#FFFF00]'+'[/COLOR][color=#00AA00][color=#0000FF]),[/COLOR][color=#00FF00]array[/COLOR][color=#0000FF]([/COLOR][/COLOR][color=#FFFF00]'\\x'[/COLOR][color=#00AA00][color=#0000FF],[/COLOR][/COLOR][color=#FFFF00]' '[/COLOR][color=#00AA00][color=#0000FF]),[/COLOR][color=#00FF00]urlencode[/COLOR][color=#0000FF]([/COLOR]$txt[color=#0000FF]))[/COLOR][color=#FF0000];[/COLOR] [color=#00FF00]echo[/COLOR] $txt[color=#FF0000];[/COLOR][/COLOR]
Не к сожалению не катит так-как к примеру есть пользователь >l<izn- Он захочет посмотреть инфу о себе введет свой логин он обработается и вот что получится [font=Verdana, Arial, Helvetica, sans-serif] И такой запрос вернёт не точто надо. Но всёравно спс. за идею у кого ещё есть какиенибудь идеи [/font]
Ну а потом раскодируешь. А ещё строки в SQL можно в HEX кодировать, тапа того Code: select * from memb WHERE Name=0x3E6C3C697A6E2D; Code: [color=#00AA00]$txt[color=#0000FF]=[/COLOR][/COLOR][color=#FFFF00]">l<izn-"[/COLOR][color=#00AA00][color=#FF0000];[/COLOR] $ret[color=#0000FF]=[/COLOR][/COLOR][color=#FFFF00]'0x'[/COLOR][color=#00AA00][color=#FF0000];[/COLOR] $hex[color=#0000FF]=[/COLOR][/COLOR][color=#FFFF00]'0123456789ABCDEF'[/COLOR][color=#00AA00][color=#FF0000];[/COLOR] [color=#00FF00]for[/COLOR][color=#0000FF]([/COLOR]$x[color=#0000FF]=[/COLOR][color=#00FF00]0[/COLOR][color=#FF0000];[/COLOR]$x[color=#0000FF]<[/COLOR][color=#00FF00]strlen[/COLOR][color=#0000FF]([/COLOR]$txt[color=#0000FF])[/COLOR][color=#FF0000];[/COLOR]$x[color=#0000FF]++)[/COLOR][color=#FF0000]{[/COLOR] $ret[color=#0000FF].=[/COLOR]$hex[color=#FF0000]{[/COLOR][color=#00FF00]ord[/COLOR][color=#0000FF]([/COLOR]$txt[color=#FF0000]{[/COLOR]$x[color=#FF0000]}[/COLOR][color=#0000FF])>>[/COLOR][color=#00FF00]4[/COLOR][color=#FF0000]}[/COLOR][color=#0000FF].[/COLOR]$hex[color=#FF0000]{[/COLOR][color=#00FF00]ord[/COLOR][color=#0000FF]([/COLOR]$txt[color=#FF0000]{[/COLOR]$x[color=#FF0000]}[/COLOR][color=#0000FF])[/COLOR][color=#FF0000]&[/COLOR][color=#00FF00]15[/COLOR][color=#FF0000]}; }[/COLOR] [color=#00FF00]echo[/COLOR] $ret[color=#FF0000];[/COLOR][/COLOR]
Перед сохранением данных в базе кодируй их например при помощи urlencode() ! тоесть пользователя >l<izn- сохраняй в базе как %3El%3Cizn- ивсе!!! а при выводе данных обратно раскодируй их! надеюсь понял идею...
Нет просто MSSQL както криво работает спри этом тоесть вот такой запрос вызывает ошибку в MSSQL select * from memb WHERE Name='test\''; Понял но некатит так-как это база одной онлайн игры и я немогу редактировать то как данные хранятся в базе потомучто допустим пользователь зарегался с ником >l<izn- в базе он сохранился как %3El%3Cizn- и поэтому пользователю предётся вводить %3El%3Cizn- чтобы войти в игру. Ладно тогда так каие символы надо фильтровать для защиты понятно что " ' + какие ещё?
НЕ прийдеться! все данные которыйе он вводит, опять кодируй, и ищи в базе уже закодированные! а перед выводом раскодируй! короч суть така примерно! пользовательские данные -> кодируем их -> выполняем различные операции че надо, с базой работаем и.т.д -> раскодируем -> выводим пользователю! В базе все в закодированном виде храниться!
Нельзя кодировать данные так-как с базой работает нетолько сайт а ещё игра и вот она данные не будет декодировать(и исправить это я немогу). ЗЫ надо защетить сайт. Какие символы надо фильтровать????
Ну а вариант с HEX'ом чем не устраивает, MySql и MSSql понимают его как текст, так что он будет храница в текстовом виде.
Ксожалению он тоже непотходит по двум причинам первая(правда не очень значительная) в базе имя чара хранится как nvarchar(50) и менять это не желательно дак вот этот тип не потдерживает HEX и вторая причина это нельзя работать с HEX'om при запросе с like.