programing

Laravel whoops 출력에서 .env 비밀번호를 숨기는 방법

sourcetip 2022. 10. 8. 16:34
반응형

Laravel whoops 출력에서 .env 비밀번호를 숨기는 방법

Laravel의 Whoops 출력에서 패스워드 및 기타 중요한 환경변수를 화면에 숨기려면 어떻게 해야 합니까?

가끔 다른 사람들이 제 개발 작업을 보고 있어요.예외가 발생했을 때 이러한 기밀이 표시되지 않게 하고 싶지만, 디버깅을 계속 켜거나 끄거나 전용 사이트를 빠르게 미리 보기 위해 스핀업할 필요도 없습니다.

woops는 패스워드가 표시됩니다.

Larabel 5.5.13부터는 키 아래에 변수를 나열하여 검열할 수 있습니다.debug_blacklist에서config/app.php예외가 발생하면 woops는 이러한 값을 별표로 마스킹합니다.*각 캐릭터마다.

예를 들어, 이 경우config/app.php

return [

    // ...

    'debug_blacklist' => [
        '_ENV' => [
            'APP_KEY',
            'DB_PASSWORD',
            'REDIS_PASSWORD',
            'MAIL_PASSWORD',
            'PUSHER_APP_KEY',
            'PUSHER_APP_SECRET',
        ],
        '_SERVER' => [
            'APP_KEY',
            'DB_PASSWORD',
            'REDIS_PASSWORD',
            'MAIL_PASSWORD',
            'PUSHER_APP_KEY',
            'PUSHER_APP_SECRET',
        ],
        '_POST' => [
            'password',
        ],
    ],
];

결과는 다음과 같습니다.

WOOPS 예외 페이지

우선 위의 Jeff의 솔루션을 마음에 들어 하세요.

둘째, 나처럼 모든 걸 숨기고 싶다면env variables아직 WOOP를 사용하고 있지만, 다음과 같은 해결책이 있습니다.

'debug_blacklist' => [
        '_COOKIE' => array_keys($_COOKIE),
        '_SERVER' => array_keys($_SERVER),
        '_ENV' => array_keys($_ENV),        
    ],

출력:

여기에 이미지 설명 입력

편집: 전설에 따르면 Larabel 7x부터debug_hide대신 키를 누르다

Jeff와 Raheel이 도와줘서 고마워요. 하지만 방금 조금 이해했어요.

모든 환경키를 삭제해도_ENV, 동일한 키가 여전히 를 통해 노출되어 있습니다._SERVER리스트 되어 있습니다.

다음 코드 추가config/app.php는 모든 환경변수를 [woops]페이지에서 숨깁니다.

'debug_blacklist' => [
        '_SERVER' => array_keys($_ENV),
        '_ENV' => array_keys($_ENV),        
],

저는 이 문제를 해결하기 위해 패키지를 만들었습니다.

를 사용하여 설치하기만 하면

composer require glaivepro/hidevara

대부분의 서버와 모든 env 변수가 삭제됩니다.의 임의의 패스워드 유사 필드$_POST자신의 가치관이 숨겨질 것입니다.

또한 블랙리스트 또는 화이트리스트 접근 방식 중 하나로 필드를 표시/해독/삭제할 수도 있습니다.

@jeff + @raheel의 솔루션은 훌륭합니다!!!최근 프로젝트에서는 한두 가지 속성을 화이트리스트에 추가하고 싶은 경우가 있었습니다.이러한 내용을 바탕으로 디버깅할 특정 속성을 화이트리스트에 추가할 수 있습니다.

'debug_blacklist' => [
    '_COOKIE' => array_diff(array_keys($_COOKIE), array()),
    '_SERVER' => array_diff(array_keys($_SERVER), array('APP_URL', 'QUERY_STRING')),
    '_ENV' => array_diff(array_keys($_ENV), array()),
],

.env를 사용하여 이 목록을 설정할 수 있도록 하려면 다음과 같이 하십시오.

'debug_blacklist' => [
    '_COOKIE' => array_diff(
        array_keys($_COOKIE),
        explode(",", env('DEBUG_COOKIE_WHITELIST', ""))
    ),
    '_SERVER' => array_diff(
        array_keys($_SERVER),
        explode(",", env('DEBUG_SERVER_WHITELIST', ""))
    ),
    '_ENV' => array_diff(
        array_keys($_ENV),
        explode(",", env('DEBUG_ENV_WHITELIST', ""))
    ),
],

그런 다음 .env에서 다음과 같은 작업을 수행합니다.

DEBUG_SERVER_WHITELIST="APP_URL,QUERY_STRING"

건배!

보통 로컬 개발에서는 APP_DEBUG 환경변수를 true로 설정해야 합니다.디버깅 오류 및 경고에 대한 통찰력을 높일 수 있습니다.

그러나 실제 가동 환경에서는 이 값이 항상 false여야 합니다.운영 환경에서 이 값이 true로 설정되어 있으면 애플리케이션의 최종 사용자에게 중요한 env 암호가 노출될 위험이 있습니다.

현재 Larabel 5.5.x는 이에 대한 솔루션도 제공하고 있습니다.

'어울릴 수 없다'를 돼요.debug_blacklistoption の optionconfig/app.php컨피규레이션파일이 옵션을 추가하면 Larabel은 에 기재되어 있는 모든 키를 블랙리스트에 올립니다.debug_blacklist옵션에는 아스타리스크를 붙입니다.

다음 두 가지 방법으로 사용할 수 있습니다.

방법 1 – 블랙리스트 선택 ENV 키 및 비밀번호

return [
    // ...
    'debug_blacklist' => [
        '_ENV' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],
        '_SERVER' => [
            'APP_KEY',
            'DB_PASSWORD',
        ],
        '_POST' => [
            'password',
        ],
    ],
];

방법 2 – 모든 ENV 키와 비밀번호를 블랙리스트에 올립니다.

return [
 // ...
'debug_blacklist' => [
  '_COOKIE' => array_keys($_COOKIE),
  '_SERVER' => array_keys($_SERVER),
  '_ENV' => array_keys($_ENV),
  ],
]

참조처: https://techjeni.com/how-to-secure-and-hide-env-passwords-from-laravel-debug-output/

Laravel 5.6은 내 기능하지 않지만, 이 기능은 다음과 같습니다.

$envKeys = [];
$serverKeys = [];
$cookieKeys = [];
foreach ( $_ENV as $key => $value ) { if(is_string($value)) $envKeys[] = $key; }
foreach ( $_SERVER as $key => $value ) { if(is_string($value)) $serverKeys[] = $key; }
foreach ( $_COOKIE as $key => $value ) { if(is_string($value)) $cookieKeys[] = $key; }

return [

    // ...

    'debug_blacklist' => [
        '_COOKIE'   => $cookieKeys,
        '_SERVER'   => $serverKeys,
        '_ENV'      => $envKeys,
    ],
];

더 나은 해결책을 주시면 감사하겠습니다.

Just Change(Just Change)

APP_DEBUG=true 

수신인:

APP_DEBUG=false

.env 파일.

Larabel 5.6-5.8의 경우:

'debug_blacklist' => [
    '_COOKIE'   => array_keys(array_filter($_COOKIE, function($value) {return is_string($value);})),
    '_SERVER'   => array_keys(array_filter($_SERVER, function($value) {return is_string($value);})),
    '_ENV'      => array_keys(array_filter($_ENV, function($value) {return is_string($value);})),
],

Laravel 5.7 https://laravel.com/docs/5.7/configuration에서도 이 문제가 발생하고 있습니다.

이 문제를 다시 사랑할 수 있는 세 가지 방법은 다음과 같습니다.

config/app.blash 파일 추가 코드 줄 아래에 추가

TIPS #1: 모든 변수의 블록 리스트

'debug_blacklist' => [
    '_COOKIE' => array_keys($_COOKIE),
    '_SERVER' => array_keys($_SERVER),
    '_ENV' => array_keys($_ENV),        
],

팁 #2: 특정 변수 블록 리스트(베스트 프랙티스)

return [

    // ...
    '_ENV' => [
          'APP_KEY',
          'DB_PASSWORD',
          'REDIS_PASSWORD',
          'MAIL_PASSWORD',
          'PUSHER_APP_KEY',
          'PUSHER_APP_SECRET',
          'AWS_APP_SECRET',
          'S3_BUCKET_SECRET',
          'SOCKET_APP_SECRET',
          'TWILIO_APP_SECRET',
     ],
     '_SERVER' => [
          'APP_KEY',
          'DB_PASSWORD',
      ],
      '_POST' => [
          'password',
      ],
 ]

TIPS #3: 디버깅 변수

APP_DEBUG=true to APP_DEBUG=false

주의:

운영 환경의 keep always False 디버깅

여기에는 훌륭한 답변(@Jeff, @Raheel, @Benjamin 등)이 많이 있습니다만, 조금 더 유연하고 보편적인 솔루션을 원합니다.config/app.php 파일용으로 이 스니펫을 한층 더 확장했습니다.

$debug_blacklist=array();
if(env("DEBUG_VAR_LISTING")!==null)
    foreach(explode(",", env("DEBUG_VAR_LISTING", "")) as $i){
        global ${"_{$i}"};
        if(env("DEBUG_VAR_BLACKLIST_{$i}")!==null)
            $debug_blacklist["_{$i}"]=explode(",", env("DEBUG_VAR_BLACKLIST_{$i}", ""));
        elseif(env("DEBUG_VAR_WHITELIST_{$i}")!==null)
            $debug_blacklist["_{$i}"]=array_diff(
                array_keys(${"_{$i}"}),
                explode(",", env("DEBUG_VAR_WHITELIST_{$i}", ""))
            );
    }

return [
    'debug_blacklist' => $debug_blacklist,
];

그런 다음 필요한 경우에만 .env에서 직접 블랙리스트 및 화이트리스트를 작성할 수 있습니다.

따라서 $_ENV에서 아무것도 필요하지 않은 경우 $_POST에서 모든 변수와 비밀번호만 차단할 수 있습니다.APP_URL ★★★★★★★★★★★★★★★★★」QUERY_STRING$_SERVER부터:

DEBUG_VAR_LISTING="SERVER,ENV,POST,COOKIE"
DEBUG_VAR_WHITELIST_SERVER="APP_URL,QUERY_STRING"
DEBUG_VAR_WHITELIST_ENV=""
DEBUG_VAR_BLACKLIST_POST="password"

했는데, 그 은 편집하는 이었습니다.제 해결책은 편집하는 것이었습니다.vendor/filp/whoops/src/Whoops/Handler/PrettyPageHandler.php★★★★

public function sanitizePrivate($data, $badwords){
    foreach ($data as $key=>$value) {
       
        foreach ($badwords as $keyword) {
               // dd($key);
            if (strpos(strtolower($key), $keyword) !== FALSE) {
                $data[$key] = "***************";
            }
        }
    }
    return $data;
}

이렇게 하면 모든 수신 데이터가 소문자로 변환된 다음 부분 일치를 검색하므로 암호 변수 이름의 모든 변형을 지정할 필요가 없습니다. 후 리 the the handle()제외할 항을 정의합니다.

$badwords = array("password", "pwd", "secret", "key", "token", "salt", "mail");
$_SERVER=$this->sanitizePrivate($_SERVER, $badwords);
$_ENV=$this->sanitizePrivate($_ENV, $badwords);

언급URL : https://stackoverflow.com/questions/46407009/how-to-hide-env-passwords-in-laravel-whoops-output

반응형