Laravel whoops 출력에서 .env 비밀번호를 숨기는 방법
Laravel의 Whoops 출력에서 패스워드 및 기타 중요한 환경변수를 화면에 숨기려면 어떻게 해야 합니까?
가끔 다른 사람들이 제 개발 작업을 보고 있어요.예외가 발생했을 때 이러한 기밀이 표시되지 않게 하고 싶지만, 디버깅을 계속 켜거나 끄거나 전용 사이트를 빠르게 미리 보기 위해 스핀업할 필요도 없습니다.
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',
],
],
];
결과는 다음과 같습니다.
우선 위의 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_blacklist
option の 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
'programing' 카테고리의 다른 글
MariaDB 10.1에서 UUID/guid를 생성하려면 어떻게 해야 합니까? (0) | 2022.10.08 |
---|---|
mysql/sysqladb - 테이블 열 인덱스 생성이 작동하지 않습니다. (0) | 2022.10.08 |
System.current Time Millis()는 UTC 시간을 반환합니까? (0) | 2022.10.08 |
MySQL에서 저장 프로시저/함수 정의 보기 (0) | 2022.10.08 |
SQL에서 결과를 제외한 OR을 사용하여 쿼리 (0) | 2022.10.08 |