1. PHP / Говнокод #28113

    0

    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
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    // Проверка активных ip-адресов
    $is_active = false;
    if ($dir = opendir($path_active)) {
        while (false !== ($filename = readdir($dir))) {
            // Выбирается ip + время активации этого ip
            if (preg_match('#^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})_(\d+)$#', $filename, $matches)) {
                if ($matches[2] >= time() - self::intervalSeconds) {
                    if ($matches[1] == $ip_address) {
                        $times = intval(trim(file_get_contents($path_active . $filename)));
                        if ($times >= self::intervalTimes - 1) {
                            touch($path_block . $filename);
                            unlink($path_active . $filename);
                        } else {
                            file_put_contents($path_active . $filename, $times + 1);
                        }
                        $is_active = true;
                    }
                } else {
                    unlink($path_active . $filename);
                }
            }
        }
        closedir($dir);
    }
    
    // Проверка заблокированных ip-адресов
    $is_block = false;
    if ($dir = opendir($path_block)) {
        while (false !== ($filename = readdir($dir))) {
            // Выбирается ip + время блокировки этого ip
            if (preg_match('#^(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})_(\d+)$#', $filename, $matches)) {
                if ($matches[2] >= time() - self::blockSeconds) {
                    if ($matches[1] == $ip_address) {
                        $is_block = true;
                        $time_block = $matches[2] - (time() - self::blockSeconds) + 1;
                    }
                } else {
                    unlink($path_block . $filename);
                }
            }
        }
        closedir($dir);
    }
    
    // ip-адрес заблокирован
    if ($is_block) {
        header('HTTP/1.0 502 Bad Gateway');
        echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">';
        echo '<html xmlns="http://www.w3.org/1999/xhtml">';
        echo '<head>';
        echo '<title>502 Bad Gateway</title>';
        echo '<meta http-equiv="content-type" content="text/html; charset=utf-8" />';
        echo '</head>';
        echo '<body>';
        echo '<h1 style="text-align:center">502 Bad Gateway</h1>';
        echo '<p style="background:#ccc;border:solid 1px #aaa;margin:30px au-to;padding:20px;text-align:center;width:700px">';
        echo 'К сожалению, Вы временно заблокированы, из-за частого запроса страниц сайта.<br />';
        echo 'Вам придется подождать. Через ' . $time_block . ' секунд(ы) Вы будете автоматически разблокированы.';
        echo '</p>';
        echo '</body>';
        echo '</html>';
        exit;
    }

    PHP-скрипт для защиты от DDOS, парсинга и ботов
    https://habr.com/ru/post/659811/

    ISO, 08 Апреля 2022

    Комментарии (19)
  2. Python / Говнокод #28112

    0

    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
    > cat antilol.py
    #!/usr/bin/env python
    
    import evdev
    
    device = evdev.InputDevice('/dev/input/event2')
    
    three = [0, 0, 0]
    
    for event in device.read_loop():
        if event.type == evdev.ecodes.EV_KEY and event.value == 1:
            # print(event.code, evdev.ecodes.KEY[event.code])
            three = three[1:] + [event.code]
            if three == [
                            evdev.ecodes.KEY_L,
                            evdev.ecodes.KEY_O,
                            evdev.ecodes.KEY_L
                        ] or three == [
                            evdev.ecodes.KEY_K,
                            evdev.ecodes.KEY_J,
                            evdev.ecodes.KEY_K
                        ]:
                for i in range(0, 3):
                    device.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_BACKSPACE, 1)
                    device.write(evdev.ecodes.EV_KEY, evdev.ecodes.KEY_BACKSPACE, 0)

    Отучаемся от вредных привычек.

    vistefan, 06 Апреля 2022

    Комментарии (100)
  3. Куча / Говнокод #28111

    +1

    1. 1
    Ёбаный openconnect

    openconnect -- это свободная реализация протоколоа CISCO AnyConnect VPN.

    В первом комменте опишу проблему.

    vistefan, 06 Апреля 2022

    Комментарии (64)
  4. Go / Говнокод #28110

    +1

    1. 1
    2. 2
    math.Min(float64, float64) float64
    math.Max(float64, float64) float64

    В goвне нету math.Min для integer. Даже в анскильном "Си" это есть.

    https://www.pixelstech.net/article/1559993656-Why-no-max-min-function-for-integer-in-GoLang

    3_dar, 05 Апреля 2022

    Комментарии (39)
  5. C++ / Говнокод #28109

    0

    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
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    // https://github.com/santiontanon/stransball2/blob/dff413c6ed236b4be23e0152557a26d7d902976c/sources/state_changepack.cpp#L67
    
    bool state_changepack_cycle(SDL_Surface *screen,int sx,int sy,unsigned char *keyboard)
    {
    	if (SUBSTATE==0) {
    		if (image!=0) SDL_FreeSurface(image);
    		image=IMG_Load("graphics/tittle.pcx");
    
    		{
    			levelpacks.Delete();
                                                             
    #ifdef _WIN32
                            /* Find files: */ 
                            WIN32_FIND_DATA finfo;
                            HANDLE h;
    
                            h=FindFirstFile("maps/*.lp",&finfo);
                            if (h!=INVALID_HANDLE_VALUE) {
                                    char *tmp;
    
                                    tmp=new char[strlen(finfo.cFileName)+1];
                                    strcpy(tmp,finfo.cFileName);
                                    levelpacks.Add(tmp);
    
                                    while(FindNextFile(h,&finfo)==TRUE) {
                                        char *tmp;
    
                                        tmp=new char[strlen(finfo.cFileName)+1];
                                        strcpy(tmp,finfo.cFileName);
                                        levelpacks.Add(tmp);
                                    } /* while */ 
                            } /* if */ 
    #else
                            DIR *dp;
                            struct dirent *ep;
    		  
                            dp = opendir ("maps");
                            if (dp != NULL)
                            {
                                while (ep = readdir (dp))
                                {
                                    char *tmp;
                             
                                    if (strlen(ep->d_name)>4 &&
                                        ep->d_name[strlen(ep->d_name)-3]=='.' &&
                                        ep->d_name[strlen(ep->d_name)-2]=='l' &&
                                        ep->d_name[strlen(ep->d_name)-1]=='p') {
                                        tmp=new char[strlen(ep->d_name)+1];
                                        strcpy(tmp,ep->d_name);
                                        levelpacks.Add(tmp);                                    
                                    } /* if */
                                   
                                }
                                (void) closedir (dp);
                            }
    #endif

    Super Transball 2 (супер трансшары 2)

    j123123, 04 Апреля 2022

    Комментарии (44)
  6. PHP / Говнокод #28108

    0

    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
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    <?php
    public function submit()
    {
    	$requestUri = 'http://127.0.0.1:8000/test/hs/Services/GetShedule';
    	$response = $this->doPostCall($requestUri . '?' . $this->prepareParams(), null);
    	$temp_str = json_encode(mb_convert_encoding($response, 'UTF-8'));
    	$temp_str = str_replace('\ufeff', '', $temp_str);
    	$temp_str = str_replace('\r', '', $temp_str);
    	$temp_str = str_replace('\n', '', $temp_str);
    	$temp_str = str_replace('\"', '"', $temp_str);
    	$temp_str = mb_strcut($temp_str, 1, -1);
    	$temp_arr = json_decode($temp_str, true);
    
    	$post_main_data = [];
    	$post_sub_data = [];
    	
    	foreach($temp_arr as $main_unit_key => $main_unit_value) {
    		foreach($main_unit_value as $main_unit_feature_key => $main_unit_feature_value) {
    			foreach ($main_unit_feature_value as $sub_unit_key => $sub_unit_value) {
    				foreach($sub_unit_value as $sub_unit_feature_key => $sub_unit_feature_value) {
    					unset($sub_unit_value['Расписание']);
    					$post_sub_data[$main_unit_key][$main_unit_feature_key][$sub_unit_key] = $sub_unit_value;
    				}
    			}
    		}
    	}
    
    	$raw_data = $temp_arr;
    	$filter = array('Посты');
    	$raw_data_length = count($raw_data);
    	for ($row = 0; $row < $raw_data_length; $row++) {
    		$post_main_data[] = array_diff_key($raw_data[$row], array_flip($filter));
    	}
    
    	foreach($post_main_data as $pmd_key => $pmd_value) {
    		$post_main_data[$pmd_key][key($post_sub_data[$pmd_key])] = array_values(array_values($post_sub_data[$pmd_key])[0]);
    	}
    
    	header_remove();
    	header("Content-Type: application/json");
    	http_response_code(200);
    	exit();
    }
    ?>

    JohnDoe, 04 Апреля 2022

    Комментарии (1)
  7. Java / Говнокод #28107

    +1

    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
    import org.springframework.core.Ordered;
       import org.springframework.core.annotation.Order;
       import org.springframework.web.bind.WebDataBinder;
       import org.springframework.web.bind.annotation.ControllerAdvice;
       import org.springframework.web.bind.annotation.InitBinder;
    
       @ControllerAdvice
       @Order(10000)
       public class BinderControllerAdvice {
          @InitBinder
          public void setAllowedFields(WebDataBinder dataBinder) {
    
              String[] denylist = new String[]{"class.", "Class.", ".class.", ".Class."};
    
              dataBinder.setDisallowedFields(denylist);
          }
       }

    Критическая 0-day уязвимость в Spring Framework, применяемом во многих Java-проектах

    Работа эксплоита сводится к отправке запроса с параметрами "class.module.classLoader.resources.cont ext.parent.pipeline.first.*", обработка которых при использовании "WebappClassLoaderBase" приводит к обращению к классу AccessLogValve. Указанный класс позволяет настроить логгер для создания произвольного jsp-файла в корневом окружении Apache Tomcat и записи в этот файл указанного атакующим кода. Созданный файл становится доступным для прямых запросов и может использоваться в качестве web shell. Для атаки на уязвимое приложение в окружении Apache Tomcat достаточно отправить запрос с определёнными параметрами при помощи утилиты curl.

    curl -v -d "class.module.classLoader.resources.context.parent.pipeline
    .first.pattern=код_для_вставки_в_файл
    &class.module.classLoader.resources.context.parent.pipeline.first.suffix=.jsp
    &class.module.classLoader.resources.context.parent.pipeline.first.directory=webapps/ROOT
    &class.module.classLoader.resources.context.parent.pipeline.first.prefix=tomcatwar
    &class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat="
    http://localhost:8080/springmvc5-helloworld-exmaple-0.0.1-SNAPSHOT/rapid7

    3_dar, 04 Апреля 2022

    Комментарии (4)
  8. Куча / Говнокод #28106

    +1

    1. 1
    Из-за вашей политоты Борманд ушёл.

    OCETuHCKuu_nemyx, 03 Апреля 2022

    Комментарии (49)
  9. Куча / Говнокод #28105

    0

    1. 1
    Пиздец-оффтоп #46

    #16: https://govnokod.ru/27328 https://govnokod.xyz/_27328
    #17: https://govnokod.ru/27346 https://govnokod.xyz/_27346
    #18: https://govnokod.ru/27374 https://govnokod.xyz/_27374
    #19: https://govnokod.ru/27468 https://govnokod.xyz/_27468
    #20: https://govnokod.ru/27469 https://govnokod.xyz/_27469
    #21: https://govnokod.ru/27479 https://govnokod.xyz/_27479
    #22: https://govnokod.ru/27485 https://govnokod.xyz/_27485
    #23: https://govnokod.ru/27493 https://govnokod.xyz/_27493
    #24: https://govnokod.ru/27501 https://govnokod.xyz/_27501
    #25: https://govnokod.ru/27521 https://govnokod.xyz/_27521
    #26: https://govnokod.ru/27545 https://govnokod.xyz/_27545
    #27: https://govnokod.ru/27572 https://govnokod.xyz/_27572
    #28: https://govnokod.ru/27580 https://govnokod.xyz/_27580
    #29: https://govnokod.ru/27738 https://govnokod.xyz/_27738
    #30: https://govnokod.ru/27751 https://govnokod.xyz/_27751
    #31: https://govnokod.ru/27754 https://govnokod.xyz/_27754
    #32: https://govnokod.ru/27786 https://govnokod.xyz/_27786
    #33: https://govnokod.ru/27801 https://govnokod.xyz/_27801
    #34: https://govnokod.ru/27817 https://govnokod.xyz/_27817
    #35: https://govnokod.ru/27822 https://govnokod.xyz/_27822
    #36: https://govnokod.ru/27826 https://govnokod.xyz/_27826
    #37: https://govnokod.ru/27827 https://govnokod.xyz/_27827
    #38: https://govnokod.ru/27833 https://govnokod.xyz/_27833
    #39: https://govnokod.ru/27862 https://govnokod.xyz/_27862
    #40: https://govnokod.ru/27869 https://govnokod.xyz/_27869
    #41: https://govnokod.ru/27933 https://govnokod.xyz/_27933
    #42: https://govnokod.ru/27997 https://govnokod.xyz/_27997
    #43: https://govnokod.ru/28042 https://govnokod.xyz/_28042
    #44: https://govnokod.ru/28080 https://govnokod.xyz/_28080
    #45: https://govnokod.ru/28086 https://govnokod.xyz/_28086

    nepeKamHblu_nemyx, 03 Апреля 2022

    Комментарии (495)
  10. Python / Говнокод #28104

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    def _generate_greeting(self) -> str:
        date = datetime.datetime.fromtimestamp(time.time(), pytz.timezone(config.TIMEZONE))
        if 6 <= date.hour < 11:
            return 'Доброе утро!'
        elif 11 <= date.hour < 18:
            return 'Добрый день.'
        elif 18 <= date.hour < 23:
            return 'Добрый вечер.'
        else:
            return 'Доброй ночи.'

    ISO, 03 Апреля 2022

    Комментарии (19)