Простите за нубский вопрос про рег.выражения

Discussion in 'PHP' started by EST a1ien, 2 Nov 2006.

  1. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Простите за нубский вопрос про

    Ещё раз прошу прощения за тупой вопрос, но незнаю как реализовать.

    Нужно проверять введенные данные пользователя чтобы защетится от SQL-inj
    Говорю сразу addslashes не предлогать.
    Так-как по непняной пречине на MSSQL работает очень криво.

    Подскажите способ как защетится но при учете того что пользователь должен использовать спец символы.


    ==================
    Вобщнм принемаю любые варианты решения

    PS: Язык php.

    Ладно тогда предложите хороший метод защиты от SQL-inj
     
    #1 EST a1ien, 2 Nov 2006
    Last edited: 2 Nov 2006
  2. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    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]
     
  3. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Не к сожалению не катит так-как к примеру есть пользователь >l<izn-
    Он захочет посмотреть инфу о себе введет свой логин он обработается и вот что получится
    [font=Verdana, Arial, Helvetica, sans-serif]
    И такой запрос вернёт не точто надо.

    Но всёравно спс. за идею у кого ещё есть какиенибудь идеи

    [/font]
     
    #3 EST a1ien, 2 Nov 2006
    Last edited: 2 Nov 2006
  4. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Ну тогда кодируй всё в base64_encode
     
  5. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Ну закодирую и что дальше делать с закодированой строкой?
     
    #5 EST a1ien, 2 Nov 2006
    Last edited: 2 Nov 2006
  6. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Ну а потом раскодируешь.

    А ещё строки в 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]
     
  7. ShAnKaR

    ShAnKaR Пачка маргарина

    Joined:
    14 Jul 2005
    Messages:
    904
    Likes Received:
    297
    Reputations:
    553
    я не понял - экранировать спецсимволы нельзя? или именно addslashes нельзя?
     
  8. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    Перед сохранением данных в базе кодируй их например при помощи urlencode() ! тоесть пользователя >l<izn- сохраняй в базе как %3El%3Cizn- ивсе!!!
    а при выводе данных обратно раскодируй их! надеюсь понял идею...
     
  9. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    727
    Reputations:
    266
    Определить спецсимволы и заэкранировать слешами.
     
    1 person likes this.
  10. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Нет просто MSSQL както криво работает спри этом тоесть вот такой запрос вызывает ошибку в MSSQL

    select * from memb WHERE Name='test\'';


    Понял но некатит так-как это база одной онлайн игры и я немогу редактировать то как данные хранятся в базе потомучто допустим пользователь зарегался с ником >l<izn- в базе он сохранился как %3El%3Cizn- и поэтому пользователю предётся вводить %3El%3Cizn- чтобы войти в игру.

    Ладно тогда так каие символы надо фильтровать для защиты понятно что " ' + какие ещё?
     
  11. nc.STRIEM

    nc.STRIEM Members of Antichat

    Joined:
    5 Apr 2006
    Messages:
    1,036
    Likes Received:
    347
    Reputations:
    292
    НЕ прийдеться! все данные которыйе он вводит, опять кодируй, и ищи в базе уже закодированные! а перед выводом раскодируй!

    короч суть така примерно!
    пользовательские данные -> кодируем их -> выполняем различные операции че надо, с базой работаем и.т.д -> раскодируем -> выводим пользователю!
    В базе все в закодированном виде храниться!
     
    #11 nc.STRIEM, 3 Nov 2006
    Last edited: 3 Nov 2006
  12. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Нельзя кодировать данные так-как с базой работает нетолько сайт а ещё игра и вот она данные не будет декодировать(и исправить это я немогу).

    ЗЫ надо защетить сайт. Какие символы надо фильтровать????
     
  13. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Ну а вариант с HEX'ом чем не устраивает, MySql и MSSql понимают его как текст, так что он будет храница в текстовом виде.
     
  14. EST a1ien

    EST a1ien Elder - Старейшина

    Joined:
    2 Apr 2006
    Messages:
    249
    Likes Received:
    48
    Reputations:
    16
    Ксожалению он тоже непотходит по двум причинам первая(правда не очень значительная) в базе имя чара хранится как nvarchar(50) и менять это не желательно дак вот этот тип не потдерживает HEX и вторая причина это нельзя работать с HEX'om при запросе с like.