Защита от php injection

Тема в разделе "WASM.HEAP", создана пользователем _DEN_, 22 ноя 2009.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Допустим есть у нас вот такой php-код:

    Код (Text):
    1. eval("bla-bla-bla echo('$param_from_post'); bla-bla-bla");
    Достаточно ли для 100% безопасности сделать addslashes для внешних параметров, или будет оставаться какая-то возможность провести инъекцию?
     
  2. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    _DEN_
    Мне кажется, что при таком использовании возможна утечка информации, потому что в $param_from_post могут оказаться всякие $ с именами переменных, которые экранироваться не будут, и попав в eval могут быть заменены на значения. А вдруг в переменной пароль был?)
     
  3. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    _DEN_
    Хотя я ошибся, там ведь одинарные кавычки, для них $ не опасен.
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Black_mirror

    Могут быть и двойные. Спасибо, об этом я как-то не подумал.
     
  5. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Black_mirror

    Ок, если это не echo, а mail на служебную почту? То есть переменные можно выводить. Тогда есть опасность? Если $param_from_post = blabla $(put_your_injectoin_here) blabla - внутри $() ведь можно любой код отработать?
     
  6. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    _DEN_

    На счёт выполнить код не знаю. В исходном варианте дыр я не вижу. Но может у кого-то зрение лучше. А вот если будет eval("bla-bla-bla echo(\"$param_from_post\"); bla-bla-bla"); То тут уже можно попытаться угадать имя какой-то важной переменной и увидеть её содержимое.
     
  7. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    Код (Text):
    1. <?php
    2. class A{
    3.   function do_bad(){
    4.     echo('do_bad');
    5.   }
    6. }
    7. if(isset($_POST['eval'])){
    8.   $a=new A();
    9.   $text=addslashes($_POST['text']);
    10.   eval("echo(\"$text\");");
    11. }
    12. ?><html><body><form method=post>
    13. <input type='text' name='text' size=40 />
    14. <input type='submit' name='eval' value='eval'/>
    15. </form></body></html>
    Если в текстовое поле ввести {$a->do_bad()}, то это метод успешно будет выполнен. Но здесь используются двойные кавычки. Возможно что если все переменные попадающие в eval заключать в одинарные кавычки и добавлять к ним слеши, то пролезть никуда будет нельзя. Хотя мне очень любопытно, для какой такой задачи eval потребовался?!
     
  8. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    eval нужен для динамической генерации кода пхп, но, само по себе, создаёт кучу проблем с безопасностью. Ден, ты что АИ на пхп задумал строкать?:) c eval о 100% секуре забудь + доп. траблы с глюками в коде:derisive:
     
  9. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Black_mirror, UbIvItS

    Так, вернемся к нашим инъекциям :)

    eval потребовался для скриптинга в движке сайта. Если статические read-only отображения вполне себе описываются различными data-driven схемами, то вот с сохранением данных все сложнее. Описать логику обработки входящих данных data-driven схемами как-то нереально сложно. Например, если по post-запросу нужно сформировать из его содержимого какое-то сообщение, отправить его по почте, добавить запись в базу и сделать запись в лог. Как это все подчинить каким-то схемам - я пока что слабо представляю. Поэтому пока что думаю что наиболее легкий вариант - введение понятия Task, которую нужно отработать по запросу. Task - фрагмент скрипта + документированное апи, которым вносятся соответствующие изменения или как-то обрабатываются входящие данные.

    Если есть идеи получше, то я с радостью их выслушаю :)
     
  10. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    "Данных"? эт малость расплывчито звучит. обычно данные получаемые и передаваемые имеют стат.структуру и без проблем обрабатываются стат. кодом. можно ли более подробно: что за сайт, ф чём его миссия?:)
     
  11. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    UbIvItS

    Это не сайт, а двежог. То есть чоткой мисеи нет. А под каждый случай обработки код не напишешь.
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    _DEN_, ну, знаешь ли написать движО_огЪ под все случаи жизни занятие сомнительное, самое лучшее решение: внедрить поддержку плугинов..
    все остальные идеи можно положить для книжечки о светлом будущем новых тех-гий.