DB 비밀번호 보안


18

내가 본 대부분의 PHP / MySQL 기반 웹 사이트의 구조를 살펴보면 약간의 정보를 수집하면 로깅을위한 정보를 저장하는 설정 또는 구성 파일이 있기 때문에 데이터베이스 비밀번호를 식별하는 것이 그리 어렵지 않은 것으로 보입니다. DB에. 내 데이터베이스의 권한이 원격 요청에 대해 적절하게 제한되도록하는 기본적인주의 사항 외에,이 정보를 보호하기 위해 내 프로젝트에서 어떤 옵션을 구현할 수 있습니까?


1
명확히하기 위해 - 당신은 웹 사이트에서 데이터베이스에 로그인 자격 증명을 저장에 대한 요구하고, 그리고 하지 어떻게 제대로 올바른 데이터베이스 내에서 웹 사이트의 사용자 암호를 저장하기 위해?
Joe

옳은; 그것이 내가 얻는 것입니다.
Kaji

답변:


10

비밀번호 저장에 대한 직접적인 대답은 아니지만 일반적으로 웹 애플리케이션을 작성할 때 최소한 두 개의 데이터베이스 연결을 사용합니다. 하나는 사용자 관련 활동에 99 %, 제한된 권한이 있고 다른 하나는 '관리'기능에 사용됩니다 (사용자 삭제 등).

다른 사람의 패키지를 설치하는 경우에는 일반 사용자 유형 작업을 수행 할 수있는 데이터베이스 액세스 권한 만있는 공개 인스턴스와 IP 제한이있는 두 번째 인스턴스를 설치합니다. 모든 'admin'유형 활동에 사용해야하는 로컬 로컬 서브넷 (다른 머신 일 수도 있음). 둘 다 테이블을 수정하는 데 액세스 할 수있는 권한이 없습니다 ... 웹 응용 프로그램이 검증되지 않은 자체 업데이트 작업을 실행하도록 허용하는 것보다 기본 데이터베이스 도구를 사용하는 것이 좋습니다.

더 나아가서 주어진 작업을 위해 특별히 더 많은 연결을 추가 할 수 있습니다 ... 따라서 사용자 생성 및 암호 관리 작업은 사용자 테이블에 대한 추가 권한이있는 사용자를 통과하고 로그인에는 인증 할 데이터베이스 권한이 있습니다. 등

이런 식으로 SQL 주입 공격이 발생하면 대부분의 웹 페이지에서 실제로 중요한 작업을 수행 할 수 없습니다. 암호 해시를 볼 수 없으며 새로운 관리자를 추가 할 수 없습니다 (그들이 할 수는 없음) 어쨌든 등) 여전히 컴퓨터에서 쉘을 얻는 데 도움이되지 않지만 속도가 느려집니다.


1
우리는 비슷한 일을합니다. 그러나 일반적으로 기능별로 수행하는 대신 데이터베이스의 각 사용자 / 응용 프로그램에 대해 새 계정을 만듭니다. 이는 우리에게 두 가지 문제를 해결합니다 .1) OEM과 같은 도구에서 데이터베이스 사용을 차별화 할 수 있습니다 (즉, 세부적으로 데이터베이스를 망치는 사람을 볼 수 있음) .2) 각 사용자가보고 액세스 할 수있는 항목을 개별적으로 조정할 수 있습니다 데이터 베이스.
ScottCher


4

나는 가능하면 로컬 소켓을 통해 PostgreSQL의 'Ident'인증 을 사용하는 것을 좋아합니다 . 이렇게하면 로컬 사용자가 로컬 컴퓨터의 Unix / Windows 사용자에게 직접 매핑되므로 암호 저장에 대해 걱정할 필요가 없습니다. 그래도 이것이 MySQL의 옵션이라고 생각하지 않습니다.

데이터베이스와 웹 서버가 별도의 두 컴퓨터에있는 경우 SSL을 통해 MD5 암호를 사용합니다. 적대자가 내 프론트 엔드 서버에 액세스 할 수있는 경우 데이터베이스와 통신하는 방법을 알아 내기 전에 시간 문제 일뿐입니다.


3

.NET Framework를 사용하는 경우 암호화 된 연결 문자열을 사용할 수 있습니다. 다른 언어 / 프레임 워크에서 그러한 일이 가능한지 모르겠지만 연결이 손상되지 않도록하는 또 다른 보호 장치가 될 것입니다.

암호화 된 연결 문자열을 사용하는 것 외에 LDAP / Kerberos / Active Directory를 사용하는 것이 가장 안전한 옵션입니다.


3

암호가 일반 텍스트로 저장된 경우 해시 (MD5, SHA), Luke를 사용하십시오!


OP는 사용자 비밀번호 저장을 요구하지 않습니다. 그러나 그렇습니다. 물론 사용자 암호를 해시하지만 MD5 또는 SHA 제품군을 사용하지 마십시오! bcrypt 또는 PBKDF2를 사용하십시오 . 그렇지 않으면 MD5와 SHA1을 사용하여 간단한 무차별 대입 공격에 노출 된 회사와 같은 뉴스에서 곧 자신 발견하게 될 것 입니다 .
Nick Chammas 2016 년

해싱뿐만 아니라 물론 솔트 및 기타 기술도 필요합니다. 그리고 암호화 프리미티브 자체를 구현하지 말고 널리 테스트 된 암호화 라이브러리를 사용해야합니다.
Yasir Arsanukaev 2016 년

2

프로그래밍 언어에 따라 로그인 자격 증명을 암호화 할 수 있지만 해석 된 언어를 실행중인 경우 시스템에 액세스 할 경우 자격 증명을 알아낼 수 없도록 할 수있는 방법이 없습니다.

C ++ 등을 실행하는 경우 솔트 된 암호화 / 암호 해독 기능을 생성 / 찾기하고 그를 통해 자격 증명을 실행하고 결과 해시를 시스템에 파일로 저장하는 것이 좋습니다.

PHP 등 mcrypt_encrypt()을 실행하는 경우 자격 증명에 대한 래퍼를 작성 하고 자격 증명을 소금에 넣은 다음 일부 코드 난독 화를 실행하여 해커가 시스템에 액세스 할 수있는 경우 속도를 늦추십시오.


자격 증명을 암호화하는 경우 자격 증명을 다시 해독하려면 다른 비밀이 필요합니다. 또는 암호화 된 양식이 비밀이되어 공격자가이를 사용할 수 있습니다. 일부 세부 사항이 누락되었습니다.
피터 아이젠 트라우트
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.