1. Java / Говнокод #23410

    +4

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    <form>
         <input name=userid type=text>
         <input name=password type=text>
         <input name=email text=text>
         <input type=submit>
      </form>
    
    public class User {
         private String userid;
         private String password;
         private String email;
         private boolean isAdmin;
       
         //Getters & Setters
       }
    
    
    
     @RequestMapping(value = "/addUser", method = RequestMethod.POST)
      public String submit(User user) {
         
         userService.add(user);
      
         return "successPage";
      }

    Here is the typical request:

    POST /addUser

    userid=bobbytables&password=hashedpass&[email protected]


    And here is the exploit:
    POST /addUser

    userid=bobbytables&password=hashedpass&[email protected]&isAdmin=true


    https://www.owasp.org/index.php/Mass_Assignment_Cheat_Sheet

    Я вообще охуел, когда узнал что такие уязвимости существуют. А вы говорите PHP говно.

    Запостил: inho, 14 Октября 2017

    Комментарии (33) RSS

    • # такие уязвимости существуют

      Более того: эта уязвимость встречается очень часто.

      PS. Ещё одна: habrahabr.ru/post/340066
      Ответить
      • Да, я из этой статьи и узнал. Вернее не из статьи, а из отсылки из неё. Автор даже не удосужился написать о сути уязвимости.
        Ответить
    • такие уязвмости встречаются в коде тех, кто не удосужился почитать документацию
      Ответить
    • Хотели не писать бойлерплейт - получите.

      А вообще, там же должен быть какой-то механизм для валидации перед записью в базу, иначе и в логин всякой херни понасуют.
      Ответить
      • Типа Робин-брось-таблицу...
        Ответить
        • Да не, тут всё-таки жаба, строки неудобно клеить, так что маловероятно.

          А вот в сторону хтмл - вполне возможно. Ну как минимум ник с невидимыми пробелами, чтобы под кого-то другого косить. Или RTLом вёрстку пидорасить. Ну или с zalgo пофаниться на худой конец.
          Ответить
          • Если движок писали не пидарасы то ничего страшного от хранения ХТМЛ в базе не случится

            Эскейпить надо перед выводом.
            Перед выводом в HTML надо превращать в entities.
            Перед выводом в PDF не нужно.

            Это совсем не значит что в базе надо запрещать что-то хранить
            Ответить
            • > в базе надо запрещать что-то хранить
              Заведёт кто-нибудь учётку Sema​Real и будет от твоего имени постить всяких гомонигров. Ничего страшного же?

              Или зарегается как ‮SemaReal и распидорасит разметку.

              Всё-таки для многих полей стоит задать разумные ограничения, даже если всё корректно эскейпится на выводе.
              Ответить
              • кто бы спорил

                но запрещать символ в модели просто потому что он один из вью (пусть и самый важный) его не умеет -- это фейл
                Ответить
                • > это фейл
                  Здесь тонкая грань, блин...

                  Для тех же сообщений или описаний товаров - да, согласен. Пусть вьюха сама разбирается с этим говном.

                  Но писать функцию, которая делает визуальное сравнение джвух юникодных строк, сложно и дорого. Имхо, ограничение на допустимые символы в userid'е будет разумным компромиссом.
                  Ответить
                  • логин я всегда делаю однобайтовой кодировкой
                    все что старше 127 точно нахуй
                    Ответить
                    • При этом тупо обрезаешь все старшие биты, не выводя ворнингов?
                      Ответить
                      • Я валидирую поле регуляркой)

                        Тоже самое я делаю для полей с емейлом. Им тоже не нужны символы за пределами a-zA-Z_0-9-.
                        Ответить
                        • > полей с емейлом. Им тоже не нужны символы за пределами a-zA-Z_0-9-.
                          Начальник! Начальник, бля! Уберите от меня этого мудака!!! Идите мойте его, нахуй, я с ним здесь сидеть не буду, блядь!
                          Ответить
                          • Не понимаю чем я тебя расстроил

                            У тебя почта в домене .рф?
                            Ответить
                            • Если почта в домене .рф, можно записать домен через .xn--p1ai (главное, чтобы не было ограничения на длину доменного имени).

                              Может быть, у него в юзернейме плюсик или ещё какой-нибудь символ?
                              Ответить
                              • плюсик можно, кстати

                                Вообще говоря перед собачкой можно что угодно, но SMTP должен уметь проходить через семибитные кодировки и это надо учитывать.


                                Но если ты точно знаешь что он не пойдет через них (например потому что ты шлешь почту на тот же сервер) то пиши что угодно: главное чтобы сервер понял
                                Ответить
                                • Примеры «плохих» адресов:
                                  GIS_+a_RCI_+lGivenname_Surname+i%MHS+d_20D08E2B01F53FDC-20D08E2B02F53FDC%[email protected]
                                  SOME_USER@HP-SWITZERLAND-desk1////////HPMEXT1/THIERRY#b#PARIDANT#o#HP8700#o#Y0.om.hp.com
                                  user:[email protected]
                                  user%[email protected]
                                  user%[email protected]
                                  support%[email protected]
                                  user%[email protected]
                                  user%[email protected]
                                  user%[email protected]
                                  John_Smith/[email protected]
                                  /C=CA/ADMD=TELECOM.CANADA/ID=ICS.TEST/S=TEST_GROUP/@nasamail.nasa.gov
                                  /C=country/ADMD=system/O=organization/PN=John_Smith/DD.ID=userid/@Sprint.COM
                                  user%[email protected]

                                  Они укладываются в семибитную кодировку, но не проходят через некоторые самопальные фильтры.
                                  Ответить
                                  • Четыре самых длинных - уже на грани здравого смысла.
                                    Годится для проверки адресанта на трезвость или защиты от подбора адреса спамерами по словарю.
                                    Ответить
                                  • Ну строго говоря они все валидные адреса в соответствии с RFC-822 и её наследниками.

                                    Регулярка для проверки адреса занимает четверть листа A4, и редко когда используется.


                                    >>C=CA/ADMD=TELE
                                    Запахло LDAP / X.500

                                    >>user%host
                                    Запахло еще какой-то древней почтовой сетью, чем-то типа UUCP.
                                    Ответить
              • Я на одном сайте поставил в профиле в имени RTL символ. Ничего страшного не произошло. Имя было обёрнуто в span, и страницу не распидорасило.
                Ответить
              • Поэтому на сайтах надёжнее использовать восьмибитные (локальные неуникодные) кодировки.
                Ответить
                • LPWSTR
                  Ответить
                • и потом наверху сайта иметь кнопочку
                  "koi8-r"
                  "win-1251"
                  "mac-cyr"

                  чтобы пользователь сам выбирал

                  я всегда так делаю
                  Ответить
                  • Отличное решение. Сторонники Apple выбирают одну кодировку, сторонники Android - другую, поклонники Microsoft - третью, и общаются на одном и том же сайте без срачей. Аналогично - сторонники России, Украины и Европы.
                    Ответить
                    • не Андроид а древний *nix только

                      так было много, много лет назад
                      Ответить
            • А ты слышал что-нибудь про хтмлтчер?
              Ответить
    • PHP за 3 дня выучил. Пиздец простой
      Ответить

    Добавить комментарий