해커로부터 웹 사이트를 보호하기위한 9 가지 보안 팁

사이트에 해킹 할만한 가치가 없다고 생각할 수 있지만 웹 사이트는 항상 손상됩니다. 웹 사이트 보안 침해의 대부분은 데이터를 훔치거나 웹 사이트 레이아웃 하지만 대신 서버를 스팸에 대한 이메일 릴레이로 사용하거나 일반적으로 불법적 인 성격의 파일을 제공하기 위해 임시 웹 서버를 설정하려고합니다. 손상된 시스템을 남용하는 다른 매우 일반적인 방법은 서버를 봇넷의 일부로 사용하거나 비트 코인을 채굴하는 것입니다. 랜섬웨어의 공격을받을 수도 있습니다.

해킹은 소프트웨어의 알려진 웹 사이트 보안 문제를 악용하기 위해 인터넷을 샅샅이 뒤지는 자동 스크립트에 의해 정기적으로 수행됩니다. 다음은 귀하와 귀하의 사이트를 온라인에서 안전하게 유지하는 데 도움이되는 9 가지 주요 팁입니다.

01. 소프트웨어를 최신 상태로 유지

당연한 것처럼 보일 수 있지만 모든 소프트웨어를 최신 상태로 유지하는 것은 사이트를 안전하게 유지하는 데 중요합니다. 이는 서버 운영 체제와 CMS 또는 포럼과 같이 웹 사이트에서 실행중인 모든 소프트웨어에 모두 적용됩니다. 소프트웨어에서 웹 사이트 보안 허점이 발견되면 해커가이를 악용하려고합니다.



관리 호스팅 솔루션을 사용하는 경우 호스팅 회사에서 처리해야하므로 운영 체제에 대한 보안 업데이트 적용에 대해 크게 걱정할 필요가 없습니다.

웹 사이트에서 CMS 또는 포럼과 같은 타사 소프트웨어를 사용하는 경우 보안 패치를 신속하게 적용해야합니다. 대부분의 공급 업체에는 웹 사이트 보안 문제를 자세히 설명하는 메일 링리스트 또는 RSS 피드가 있습니다. 워드 프레스 , Umbraco 및 기타 여러 CMS는 로그인 할 때 사용 가능한 시스템 업데이트를 알려줍니다.

많은 개발자가 Composer, npm 또는 RubyGems와 같은 도구를 사용하여 소프트웨어 종속성을 관리하고, 의존하는 패키지에 나타나는 보안 취약성은주의를 기울이지 않는 가장 쉬운 방법 중 하나입니다. 종속성을 최신 상태로 유지하고 다음과 같은 도구를 사용하십시오. 보석 구성 요소 중 하나에서 취약성이 발표되면 자동 알림을받습니다.

02. SQL 인젝션주의

SQL 주입 공격은 공격자가 웹 양식 필드 또는 URL 매개 변수를 사용하여 데이터베이스에 액세스하거나 데이터베이스를 조작하는 경우입니다. 표준 Transact SQL을 사용하면 테이블 변경, 정보 가져 오기 및 데이터 삭제에 사용할 수있는 불량 코드를 쿼리에 무의식적으로 삽입하기 쉽습니다. 항상 매개 변수화 된 쿼리를 사용하여이를 쉽게 방지 할 수 있으며, 대부분의 웹 언어에는이 기능이 있으며 구현하기 쉽습니다.

다음 쿼리를 고려하십시오.

거친 질감의 종이에 목탄을 사용하면 어떤 효과를 얻을 수 있습니까?
'SELECT * FROM table WHERE column = '' + parameter + '';'

공격자가 URL 매개 변수를 '또는'1 '='1로 전달하도록 변경하면 쿼리가 다음과 같이 표시됩니다.

'SELECT * FROM table WHERE column = '' OR '1'='1';'

'1'이 '1'과 같기 때문에 공격자가 실행될 SQL 문 끝에 추가 쿼리를 추가 할 수 있습니다.

이 쿼리를 명시 적으로 매개 변수화하여 수정할 수 있습니다. 예를 들어 PHP에서 MySQLi를 사용하는 경우 다음과 같아야합니다.

$stmt = $pdo->prepare('SELECT * FROM table WHERE column = :value'); $stmt->execute(array('value' => $parameter));

03. XSS 공격으로부터 보호

교차 사이트 스크립팅 (XSS) 공격은 악성 JavaScript를 페이지에 삽입 한 다음 사용자의 브라우저에서 실행되며 페이지 콘텐츠를 변경하거나 정보를 훔쳐 공격자에게 다시 보낼 수 있습니다. 예를 들어, 유효성 검사없이 페이지에 댓글을 표시하면 공격자가 스크립트 태그와 자바 스크립트가 포함 된 댓글을 제출할 수 있으며, 이는 다른 모든 사용자의 브라우저에서 실행되고 로그인 쿠키를 훔쳐서 공격이 모든 사용자의 계정을 제어 할 수 있도록합니다. 댓글을 본 사용자입니다. 사용자가 활성 자바 스크립트 콘텐츠를 페이지에 삽입 할 수 없도록해야합니다.

이는 현재 페이지가 주로 사용자 콘텐츠로 만들어지고 많은 경우 Angular 및 Ember와 같은 프런트 엔드 프레임 워크에서도 해석되는 HTML을 생성하는 최신 웹 애플리케이션에서 특히 중요합니다. 이러한 프레임 워크는 많은 XSS 보호를 제공하지만 서버와 클라이언트 렌더링을 혼합하면 새롭고 더 복잡한 공격 경로도 생성됩니다. JavaScript를 HTML에 효과적으로 삽입 할뿐만 아니라 Angular 지시문을 삽입하거나 Ember를 사용하여 코드를 실행할 콘텐츠를 삽입 할 수도 있습니다. 도우미.

여기서 핵심은 사용자 생성 콘텐츠가 예상 한 범위를 벗어나 브라우저에서 의도 한 것과 다른 것으로 해석하는 방법에 초점을 맞추는 것입니다. 이것은 SQL 주입에 대한 방어와 유사합니다. HTML을 동적으로 생성 할 때 찾고자하는 변경을 명시 적으로 수행하는 함수를 사용하거나 (예 : element.innerHTML을 수동으로 설정하는 대신 브라우저에 의해 자동으로 이스케이프되는 element.setAttribute 및 element.textContent 사용) 또는 함수를 사용합니다. 문자열을 연결하거나 원시 HTML 콘텐츠를 설정하는 대신 적절한 이스케이프를 자동으로 수행하는 템플릿 도구에서.

XSS 방어자 도구 상자의 또 다른 강력한 도구는 콘텐츠 보안 정책 (CSP)입니다. CSP는 서버가 반환 할 수있는 헤더로, 페이지에서 JavaScript가 실행되는 방법과 내용을 제한하도록 브라우저에 지시합니다 (예 : 도메인에서 호스팅되지 않은 스크립트 실행 금지, 인라인 JavaScript 금지 또는 eval () 비활성화). Mozilla는 훌륭한 가이드 몇 가지 예시 구성으로. 이로 인해 공격자의 스크립트가 페이지에 들어갈 수 있더라도 작동하기가 더 어려워집니다.

04. 오류 메시지주의

오류 메시지에서 제공하는 정보의 양에주의하십시오. 사용자에게 최소한의 오류 만 제공하여 서버에있는 비밀 (예 : API 키 또는 데이터베이스 암호)이 유출되지 않도록합니다. SQL 삽입과 같은 복잡한 공격을 훨씬 쉽게 만들 수 있으므로 전체 예외 세부 정보도 제공하지 마십시오. 서버 로그에 자세한 오류를 보관하고 사용자에게 필요한 정보 만 표시합니다.

05. 양쪽에서 검증

유효성 검사는 항상 브라우저와 서버 측 모두에서 수행되어야합니다. 브라우저는 비어있는 필수 필드 및 숫자 전용 필드에 텍스트를 입력 할 때와 같은 간단한 실패를 포착 할 수 있습니다. 그러나이를 우회 할 수 있으며, 이러한 유효성 검사 및 더 깊은 유효성 검사 서버 측을 확인해야합니다. 그렇게하지 않으면 악성 코드 또는 스크립팅 코드가 데이터베이스에 삽입되거나 웹 사이트에 바람직하지 않은 결과가 발생할 수 있습니다.

06. 비밀번호 확인

누구나 복잡한 암호를 사용해야한다는 것을 알고 있지만 그렇다고 항상 사용하는 것은 아닙니다. 서버 및 웹 사이트 관리 영역에 강력한 암호를 사용하는 것이 중요하지만 사용자가 계정 보안을 보호하기 위해 좋은 암호 관행을 주장하는 것도 똑같이 중요합니다.

사용자가 좋아하지 않는 한 대문자와 숫자를 포함하여 최소 8 자 정도의 암호 요구 사항을 적용하면 장기적으로 정보를 보호하는 데 도움이됩니다.

암호는 항상 암호화 된 값으로 저장해야하며, SHA와 같은 단방향 해싱 알고리즘을 사용하는 것이 좋습니다. 이 방법을 사용한다는 것은 사용자를 인증 할 때 암호화 된 값만 비교한다는 것을 의미합니다. 추가 웹 사이트 보안을 위해 비밀번호 당 새 솔트를 사용하여 비밀번호를 솔트하는 것이 좋습니다.

누군가가 귀하의 암호를 해킹하고 도용하는 경우 해시 된 암호를 사용하면 암호 해독이 불가능하므로 제한을 손상시킬 수 있습니다. 누군가가 할 수있는 최선의 방법은 사전 공격 또는 무차별 대입 공격으로, 기본적으로 일치 항목을 찾을 때까지 모든 조합을 추측합니다. 솔트 된 암호를 사용할 때, 계산적으로 매우 많은 비용이 드는 모든 솔트 + 암호에 대해 모든 추측을 별도로 해시해야하므로 많은 수의 암호를 크래킹하는 프로세스가 훨씬 느립니다.

고맙게도 많은 CMS는 이러한 웹 사이트 보안 기능이 많이 내장 된 사용자 관리 기능을 제공하지만 일부 구성 또는 추가 모듈은 솔트 암호 (Drupal 7 이전)를 사용하거나 최소 암호 강도를 설정해야 할 수 있습니다. .NET을 사용하는 경우 매우 구성 가능하고 내장 된 웹 사이트 보안을 제공하고 로그인 및 암호 재설정을위한 기성 제어 기능을 포함하는 멤버십 공급자를 사용하는 것이 좋습니다.

07. 파일 업로드 방지

사용자가 웹 사이트에 파일을 업로드하도록 허용하는 것은 단순히 아바타를 변경하더라도 웹 사이트 보안에 큰 위험이 될 수 있습니다. 위험은 업로드 된 모든 파일이 아무리 무해 해 보이지만 서버에서 실행될 때 웹 사이트를 완전히 여는 스크립트를 포함 할 수 있다는 것입니다.

파일 업로드 양식이있는 경우 모든 파일을 의심스럽게 처리해야합니다. 사용자가 이미지를 업로드하도록 허용하는 경우 쉽게 위조 될 수 있으므로 파일 확장자 나 MIME 유형을 사용하여 파일이 이미지인지 확인할 수 없습니다. 파일을 열고 헤더를 읽거나 이미지 크기를 확인하는 기능을 사용하는 것조차 완벽하지 않습니다. 대부분의 이미지 형식은 서버에서 실행할 수있는 PHP 코드를 포함 할 수있는 주석 섹션을 저장할 수 있습니다.

그래서 이것을 막기 위해 무엇을 할 수 있습니까? 궁극적으로 사용자가 업로드 한 파일을 실행할 수 없게하려고합니다. 기본적으로 웹 서버는 이미지 확장자가있는 파일을 실행하려고 시도하지 않지만 image.jpg.php라는 이름의 파일이 통과하는 것으로 알려진 파일 확장자를 확인하는 데 전적으로 의존하지 않습니다.

일부 옵션은 업로드시 파일의 이름을 변경하여 올바른 파일 확장자를 확인하거나 파일 권한을 변경하는 것입니다 (예 : chmod 0666). * nix를 사용하는 경우 앞에서 언급 한 이중 확장 공격을 방지하는 설정 파일에 대한 액세스 만 허용하는 .htaccess 파일 (아래 참조)을 만들 수 있습니다.

deny from all order deny,allow allow from all

궁극적으로 권장되는 솔루션은 업로드 된 파일에 대한 직접 액세스를 모두 방지하는 것입니다. 이렇게하면 웹 사이트에 업로드 된 모든 파일이 웹 루트 외부의 폴더에 저장되거나 데이터베이스에 blob으로 저장됩니다. 파일에 직접 액세스 할 수없는 경우 개인 폴더 (또는 .NET의 HTTP 처리기)에서 파일을 가져 와서 브라우저에 전달하는 스크립트를 만들어야합니다. 이미지 태그는 이미지에 대한 직접 URL이 아닌 src 속성을 지원하므로 src 속성은 HTTP 헤더에 올바른 콘텐츠 유형을 설정하면 파일 전달 스크립트를 가리킬 수 있습니다. 예를 들면 :

대부분의 호스팅 제공 업체는 서버 구성을 처리하지만 자신의 서버에서 웹 사이트를 호스팅하는 경우 확인해야 할 사항이 거의 없습니다.

방화벽이 설정되어 있고 필수가 아닌 모든 포트를 차단하고 있는지 확인하십시오. 가능한 경우 외부 세계에서 포트 80 및 443에 대한 액세스 만 허용하는 DMZ (비무장 지대)를 설정합니다. 파일 업로드를 허용하고 SSH 또는 RDP를 통해 서버에 원격으로 로그인하기 위해 포트를 열어야하므로 내부 네트워크에서 서버에 액세스 할 수없는 경우에는 가능하지 않을 수 있습니다.

인터넷에서 파일 업로드를 허용하는 경우 SFTP 또는 SSH와 같은 서버에 대한 보안 전송 방법 만 사용하십시오.

가능하면 데이터베이스를 웹 서버와 다른 서버에서 실행하십시오. 이렇게하면 데이터베이스 서버에 외부 세계에서 직접 액세스 할 수없고 웹 서버 만 액세스 할 수 있으므로 데이터가 노출 될 위험이 최소화됩니다.

마지막으로 서버에 대한 물리적 액세스를 제한하는 것을 잊지 마십시오.

08. HTTPS 사용

HTTPS는 인터넷을 통해 보안을 제공하는 데 사용되는 프로토콜입니다. HTTPS는 사용자가 예상 한 서버와 통신하고 있으며 다른 사람이 전송중인 콘텐츠를 가로 채거나 변경할 수 없도록 보장합니다.

사용자가 비공개로 원하는 것이 있다면 HTTPS 만 사용하여 전송하는 것이 좋습니다. 물론 그것은 신용 카드와 로그인 페이지 (그리고 그들이 제출하는 URL)를 의미하지만 일반적으로 훨씬 더 많은 사이트를 의미합니다. 예를 들어 로그인 양식은 로그인 한 사용자가 귀하의 사이트에 다른 모든 요청과 함께 전송하여 이러한 요청을 인증하는 데 사용되는 쿠키를 설정하는 경우가 많습니다. 이것을 훔치는 공격자는 사용자를 완벽하게 모방하여 로그인 세션을 장악 할 수 있습니다. 이러한 종류의 공격을 물 리치려면 거의 항상 전체 사이트에 HTTPS를 사용하려고합니다.

그것은 더 이상 예전만큼 까다 롭거나 비싸지 않습니다. 암호화하자 HTTPS를 활성화하는 데 필요한 완전 무료 및 자동화 된 인증서를 제공하며,이를 자동으로 설정하기 위해 광범위한 공통 플랫폼 및 프레임 워크에 사용할 수있는 기존 커뮤니티 도구가 있습니다.

특히 Google은 HTTPS를 사용하면 검색 순위를 높일 것이라고 발표하여 SEO 이점도 제공합니다. 안전하지 않은 HTTP가 출시되고 있으며 이제 업그레이드 할 때입니다.

이미 모든 곳에서 HTTPS를 사용하고 계십니까? 더 나아가 전체 도메인에 대해 안전하지 않은 HTTP를 허용하지 않도록 서버 응답에 추가 할 수있는 쉬운 헤더 인 HSTS (HTTP Strict Transport Security) 설정을 살펴보십시오.

09. 웹 사이트 보안 도구 받기

당신이 할 수있는 모든 것을했다고 생각되면 웹 사이트 보안을 테스트 할 시간입니다. 이를 수행하는 가장 효과적인 방법은 일부 웹 사이트 보안 도구를 사용하는 것입니다. 종종 침투 테스트 또는 간단히 펜 테스트라고합니다.

이를 지원하는 많은 상용 및 무료 제품이 있습니다. 그들은 모든 알려진 익스플로잇을 테스트하고 SQL 인젝션과 같은 이전에 언급 된 방법 중 일부를 사용하여 사이트를 손상 시키려고한다는 점에서 스크립트 해커와 유사한 기반으로 작동합니다.

살펴볼 가치가있는 몇 가지 무료 도구 :

  • Netsparker (무료 커뮤니티 에디션 및 평가판 사용 가능). SQL 주입 및 XSS 테스트에 적합
  • OpenVAS 가장 진보 된 오픈 소스 보안 스캐너라고 주장합니다. 알려진 취약점을 테스트하는 데 적합하며 현재 25,000 개 이상을 스캔합니다. 그러나 설정이 어려울 수 있으며 * nix에서만 실행되는 OpenVAS 서버를 설치해야합니다. OpenVAS는 폐쇄 소스 상용 제품이되기 전에 Nessus의 포크입니다.
  • SecurityHeaders.io (무료 온라인 수표). 위에서 언급 한 보안 헤더 (예 : CSP 및 HSTS)가 도메인에서 활성화되고 올바르게 구성되었는지 빠르게보고하는 도구입니다.
  • Xenotix XSS 익스플로잇 프레임 워크 다양한 XSS 공격 예제를 포함하는 OWASP (Open Web Application Security Project)의 도구로,이를 실행하여 사이트의 입력이 Chrome, Firefox 및 IE에서 취약한 지 여부를 빠르게 확인할 수 있습니다.

자동화 된 테스트의 결과는 잠재적 인 문제가 많기 때문에 어려울 수 있습니다. 중요한 것은 중요한 문제에 먼저 집중하는 것입니다. 보고 된 각 문제는 일반적으로 잠재적 인 취약성에 대한 좋은 설명과 함께 제공됩니다. 중간 / 낮은 문제 중 일부는 사이트에서 문제가되지 않는다는 것을 알게 될 것입니다.

여성 망토 싸우는 역동적 인 만화

POST / GET 값을 변경하여 사이트를 수동으로 손상시키기 위해 취할 수있는 몇 가지 추가 단계가 있습니다. 디버깅 프록시는 브라우저와 서버 간의 HTTP 요청 값을 가로 챌 수 있으므로 여기서 도움이 될 수 있습니다. 인기있는 프리웨어 애플리케이션 바이올리니스트 좋은 출발점입니다.

그렇다면 요청에 대해 무엇을 변경해야합니까? 로그인 한 사용자에게만 표시되어야하는 페이지가있는 경우 다른 사용자의 세부 정보를보기 위해 사용자 ID 또는 쿠키 값과 같은 URL 매개 변수를 변경해보십시오. 테스트할만한 또 다른 영역은 XSS를 수행하기 위해 코드를 제출하거나 서버 측 스크립트를 업로드하도록 POST 값을 변경하는 양식입니다.

관련 기사: