키 포인트
SQL 주입 : 이것은 공격자가 SQL 코드 스 니펫을 URL 또는 웹 양식에 삽입하는 PHP의 주요 보안 취약점입니다. PDO 전처리 명세서는 데이터를 지침과 분리하여 데이터를 데이터로만 처리하는 이러한 공격을 방지하는 데 사용될 수 있습니다.
크로스 사이트 스크립팅 공격 (XSS) : XSS 공격은 악의적 인 코드가 PHP 스크립트의 출력에 주입 될 때 발생합니다. 이러한 공격은 사용자 입력을 검증하고 정리하여 방지 할 수 있으며 입력에 유해한 코드가 포함되지 않도록합니다.
원격 파일에는 다음이 포함되어 있습니다. - 여기에는 응용 프로그램에 외부 파일이 포함되어 있으므로 손상되면 피해를 입을 수 있습니다. php.ini 파일에서 및 설정을 비활성화하여 피할 수 있습니다.
세션 납치 : 세션 납치는 사용자의 세션 ID를 도난 당하고 공격자가 사용할 때 발생합니다. 함수를 사용하여 세션 ID를 주기적으로 변경하고 스크립트 만 액세스 할 수있는 위치에 세션 ID를 저장하면 이러한 공격을 방지 할 수 있습니다.
-
보안은 일련의 운영 일뿐 만 아니라 사고 방식, 문제를 바라 보는 방법 및 세상을 다루는 방법입니다. 그것은“그들이 무엇을할지 모르겠지만, 그들이 내 시스템을 망쳐 놓으려고 노력할 것임을 알고있다”는 것을 의미합니다. 그런 다음 부정적인 감정에 빠지지 않고 문제를 사전 예방합니다. 그러나 통계 규칙을 위반할 수는 없습니다. 아무도 "보안 코딩"이라는 제목의 기사를 읽지 않습니다. 모든 사람은“8 가지 일반적인 PHP 보안 공격과 피하는 방법”,“23 가지가 슈퍼 모델에 말하지 않습니다”및“방사선 중독을 피하기위한 15 가지 이유”와 같은 숫자가있는 기사를 원합니다. 따라서 "Top 10 PHP 보안 취약점"은 다음과 같습니다.
SQL 주입
최상위 스팟은 SQL 주입 공격입니다. 이 경우 누군가가 SQL 코드 스 니펫을 입력합니다 (고전적인 예제는 데이터베이스 문을 삭제하는 것입니다. 비록 다른 잠재적으로 파괴적인 작업이 많이 있지만)는 URL 또는 웹 양식에 값으로 값으로 입력합니다. 이제 그가 당신의 테이블 이름을 어떻게 알고 있는지 걱정하지 마십시오. 당신은 불길하고 풍부한 적과 싸우고 있습니다. 그렇다면 이것을 피하기 위해 무엇을 할 수 있습니까? 먼저, 사용자로부터받는 입력에 대해 회의적이어야합니다. 나는 모두가 친절하다고 생각합니까? 배우자의 가족을보십시오. 그들은 이상하고 이상하며 일부는 위험합니다. 이러한 문제를 예방하는 방법은 PDO 전처리 명세서를 사용하는 것입니다. 지금 PDO에 대해 자세히 논의하고 싶지 않습니다. 전처리 명령문은 지침에서 데이터를 분리한다고 말하십시오. 그렇게하면 데이터가 데이터가 아닌 다른 것으로 취급되는 것을 방지합니다. 자세한 내용은 Timothy Boronczyk가 작성한 "MySQL Extension에서 PDO로 마이그레이션"기사를 볼 수 있습니다.
크로스 사이트 스크립팅 공격 (xss) - 살아 남기 위해이 속임수에 의존하는 흑인 마음을 가진 사람들을 괴롭 힙니다. 부모님, 오늘 아이들과 이야기하여 악의 XSS 공격자가되지 않습니다! 모든 XSS 공격의 본질은 PHP 스크립트의 출력에 코드 (일반적으로 JavaScript 코드이지만 클라이언트 코드가 될 수 있음)를 주입하는 것입니다. 예를 들어, 포럼 게시물에서이를 수행 할 수 있습니다. 공격자는 자신의 메시지에 JavaScript 코드를 게시하여 웹 사이트에 말할 수없는 손상을 일으킬 수 있습니다. 이 강도들이 무엇을 할 수 있는지 생각할 때 내 마음이 아프다. 자세한 내용과 자신을 보호하는 방법은 PHPMaster 에서이 훌륭한 기사를 읽는 것이 좋습니다.
George Fekette가 작성한 "크로스 사이트 스크립트 공격"
Toby Osbourn의 "입력 검증을 위해 필터 함수 사용"
소스 코드 누출
이것은 Apache 구성이 실패 할 때 사람들이 보지 말아야 할 파일 이름과 내용을 볼 수있는 기능과 관련이 있습니다. 예, 이해합니다. 이런 일이 일어나지 않을 가능성이 있지만, 일어날 수 있고 스스로를 보호하기가 쉽습니다. 왜 그렇지 않습니까? 우리는 모두 PHP가 서버 측라는 것을 알고 있습니다. 스크립트의 코드를보기 위해 소스 코드를 볼 수는 없습니다. 그러나 Apache가 실패하고 스크립트가 갑자기 일반 텍스트로 제공되면 사람들은 보지 못했던 소스 코드를 볼 수 있습니다. 이 코드 중 일부는 액세스 가능한 구성 파일을 나열하거나 데이터베이스 자격 증명과 같은 민감한 정보를 포함 할 수 있습니다. 솔루션의 핵심은 응용 프로그램의 디렉토리 구조를 설정하는 방법입니다. 즉, 나쁜 사람들이 일부 코드를 보는 것은 문제가되지 않습니다. 문제는 민감한 파일이 공정장에 저장되는지 볼 수있는 코드입니다. 이 오류의 결과를 피하기 위해 공개적으로 액세스 할 수있는 디렉토리 이외의 중요한 파일을 저장하십시오. 디렉토리 구조 예제를 포함한 자세한 내용은이 기사의 5 점을 참조하십시오. 이 주제에 대한 자세한 내용은이 포럼 토론을 참조하십시오. -
원격 파일에는
가 포함되어 있습니다
기다려 주시면 설명하겠습니다. 원격 파일 포함은 원격 파일이 응용 프로그램에 포함되어 있음을 의미합니다. 매우 심오합니까? 그러나 왜 이것이 문제입니까? 원격 파일은 신뢰할 수 없기 때문입니다. 응용 프로그램에서 실행하고 싶지 않은 코드를 포함하여 악의적으로 수정되었을 수 있습니다. www.myplace.com 웹 사이트에 라이브러리 www.goodpeople.com/script.php가 포함되어 있다고 가정하십시오. 어느 날 밤, www.goodpeople.com은 해킹되었고 파일 내용은 응용 프로그램을 파괴 할 악의적 인 코드로 대체되었습니다. 그런 다음 누군가 웹 사이트를 방문하고 업데이트 된 코드를 소개 한 다음 Bang! 그래서 어떻게 멈추나요? 다행히도이 문제를 해결하는 것은 비교적 간단합니다. php.ini로 가서이 깃발의 설정을 확인하면됩니다. -
- - 외부 파일이 포함될 수 있는지 여부를 나타냅니다. 기본 설정은 "on"이지만 끄면 꺼야합니다.
allow_url_fopen
- , , 및 기능이 원격 파일을 참조 할 수 있는지 여부를 나타냅니다. 기본적으로 꺼지고 - 를 끄면 꺼집니다.
allow_url_include
include()
세션 납치 require()
세션 납치는 나쁜 사람이 다른 사람의 세션 ID를 훔치고 사용할 때입니다. 이것은 안전한 안전 예금 상자의 열쇠와 같습니다. 클라이언트와 웹 서버간에 세션이 설정되면 PHP는 세션 ID를 클라이언트의 phpsessid라는 쿠키에 저장할 수 있습니다. 페이지 요청과 함께 ID를 보내 서 서버의 영구 세션 정보에 액세스합니다 (이는 Super Global Variable include_once()
배열을 채 웁니다). 누군가가 세션 키를 훔치면 그게 나쁘나요? 대답은 다음과 같습니다. 해당 세션에서 중요한 조치를 취하지 않으면 답은 아니오입니다. 그러나 해당 세션을 사용하여 사용자를 인증하면 일부 사람들이 로그인하여 무언가로 들어갈 수 있습니다. 사용자가 중요하고 많은 권한이있는 경우 특히 나쁩니다. 그렇다면 사람들은 어떻게이 세션 ID를 훔치고, 우리는 무엇을 똑바로 세우고 하나님을 두려워하는 사람들은 무엇을 할 수 있습니까? 세션 ID는 일반적으로 XSS 공격을 통해 도난 당하므로 XSS 공격을 방지하는 것은 두 배의 이점을 얻을 수있는 좋은 일입니다. 또한 세션 ID를 가능한 한 자주 변경하는 것도 중요합니다. 도난당한 시간이 단축됩니다. PHP에서는 require_once()
함수를 실행하여 세션 ID를 변경하고 클라이언트에 알릴 수 있습니다. PHP 5.2 이상을 사용하는 사용자의 경우 (사용 중입니까?) PHP.ini 설정이 있습니다. 또는 allow_url_fopen
함수를 사용할 수 있습니다. 공유 호스팅 서비스를 사용하는 경우 (예 : 전 세계적으로 액세스 가능한 디렉토리에 세션 정보를 저장하는 경우, 예 : ) 세션 ID는 서버 측에 취약점이있을 수 있습니다. 스크립트 (디스크 또는 데이터베이스)에만 액세스 할 수있는 위치에 세션 ID를 저장 하여이 문제를 차단할 수 있습니다.
크로스 사이트 요청 위조
Brett Mafrick 또는 Sean Spencer의 전략으로도 알려진 CSRF (Cross-Site Request Properery)는 우리가 말하는 데 가장 바람직하지 않다고 말하는 사람을 보내도록 다소 정보가없는 사용자를 속이는 것과 관련이 있습니다. 그러나 CSRF 공격에 대해 계속 논의 할 수 있도록 PHPMaster의 이러한 컨텐츠의 뛰어난 예를 참조하십시오. Martin Psinas가 작성한 크로스 사이트 요청 위조 방지.
카탈로그 트래버스 이런 종류의 공격은 다른 많은 공격과 마찬가지로 보안이 좋지 않은 웹 사이트를 찾고 웹 사이트를 찾으면 소유자가 공개적으로 액세스하지 못하는 파일에 액세스 할 수 있습니다. 또한 (포인트, 포인트, 슬래시) 공격, 등반 공격 및 역 추적 공격이라고도합니다. 이 공격을 방지하는 몇 가지 방법이 있습니다. 우선, 나는 그것이 당신에게 일어나지 않기를 진심으로 바랍니다. 때때로 요정과 유니콘에게 소원을주는 것이 도움이됩니다. 때로는 그렇지 않습니다. 두 번째 접근법은 화이트리스트를 사용하여 주어진 요청에 대해 반환 할 수있는 페이지를 정의하는 것입니다. 또 다른 옵션은 파일 경로를 절대 경로로 변환하고 허용 된 디렉토리에서 파일을 참조하는 것입니다.
요약 ../
이들은 우연히 피하는 경우 PHP 응용 프로그램을 해킹 할 수있는 상위 10 가지 문제입니다. 예, 10. 계산… 1,2,3… 뭐? 당신은 8 만 계산 했습니까? 좋아, 아마도 7. 글쎄, 그것은 당신이 쉽게 속일 수 있고 나는 나쁜 사람조차도 아닙니다! Fotolia의 사진
PHP 보안 취약점 (FAQ)에 대한 자주 묻는 질문
가장 일반적인 PHP 보안 취약점은 무엇입니까?
가장 일반적인 PHP 보안 취약점에는 SQL 주입, XSS (Cross-Site Scripting Attack), CSRF (Cross-Site Request Grespery), 파일 포함 취약점 및 PHP 객체 주입이 포함됩니다. 부적절하게 처리되면 이러한 취약점은 무단 액세스, 데이터 도난 및 서버 인수로 이어질 수 있습니다. 개발자가 이러한 취약점을 이해하고 PHP 응용 프로그램을 보호하기위한 적절한 보안 조치를 구현하는 것이 중요합니다.
PHP에서 SQL 주입을 방지하는 방법은 무엇입니까?
전처리 명령문 또는 매개 변수화 된 쿼리를 사용하여 SQL 주입을 방지 할 수 있습니다. 이러한 방법은 사용자 입력이 항상 SQL 명령의 일부가 아니라 문자 그대로 데이터로 취급되도록합니다. 이는 SQL 주입의 위험을 효과적으로 제거합니다. 또한 항상 사용자 입력을 확인하고 청소하여 악의적 인 코드가 포함되지 않도록하십시오.
XSS (Cross-Site Scripting Attack) 란 무엇이며이를 방지하는 방법은 무엇입니까?
크로스 사이트 스크립팅 공격 (XSS)은 공격자가 다른 사용자가 볼 수있는 웹 페이지에 악의적 인 스크립트를 주입 할 수있는 취약점입니다. 이로 인해 세션 납치, 신원 도용 및 기타 심각한 문제가 발생할 수 있습니다. XSS를 방지하려면 항상 사용자 입력을 인코딩하고 신뢰할 수없는 데이터를 HTML 출력에 삽입하지 마십시오.
CSRF (Cross-Site Request Grospory) 공격으로부터 내 PHP 응용 프로그램을 보호하는 방법은 무엇입니까?
AnticsRF 토큰은 CSRF 공격을 방지하는 데 사용될 수 있습니다. 사용자 세션과 관련된 유일한 임의의 값입니다. 각 주 변경 요청 (예 : 양식 제출)에 포함되며 서버에서 확인합니다. 토큰에 누락되거나 잘못된 경우 요청이 거부됩니다.
취약성이 포함 된 파일은 무엇이며이를 완화하는 방법은 무엇입니까?
파일 포함 취약점은 응용 프로그램이 사용자 입력을 사용하여 작업 파일 경로를 구축하는 상황을 말합니다. 공격자는 원격 서버에서 파일을 포함하도록 입력을 조작하여 코드 실행, 데이터 유출 또는 서비스 거부를 초래할 수 있습니다. 이 취약점을 완화하려면 파일 경로에서 사용자 입력을 사용하지 않거나 입력을 철저히 확인하고 정리하십시오.
PHP 객체 주입이란 무엇이며 방지하는 방법은 무엇입니까?
PHP 객체 주입은 취약점으로, 사용자 입력이 클래스를 인스턴스화하는 데 사용될 때 발생합니다. 공격자는 입력을 조작하여 클래스의 인스턴스를 생성하고 메소드를 실행할 수 있습니다. 이를 방지하기 위해 신뢰할 수없는 소스에서 데이터를 비 제외시키지 마십시오.
내 PHP 세션을 보호하는 방법은 무엇입니까?
PHP 세션은 보안 쿠키를 사용하고 로그인 한 후 세션 ID를 재생하며 세션 타임 아웃을 구현하여 보호 할 수 있습니다. 또한 세션 데이터는 서버 측에 저장되며 세션 ID만이이를 참조하는 데 사용됩니다.
PHP 보안을위한 모범 사례는 무엇입니까?
PHP 보안을위한 일부 모범 사례에는 다음이 포함됩니다. PHP 버전을 최신 상태로 유지하고 보안 구성으로 설정, 사용자 입력 확인 및 청소, 보안 암호 해시 알고리즘을 사용하고 올바른 오류 처리를 구현합니다.
내 응용 프로그램에서 PHP 취약점을 감지하는 방법은 무엇입니까?
PHP 취약점은 코드 검토, 침투 테스트 및 자동 보안 도구 사용을 통해 감지 할 수 있습니다. 보안 취약점을위한 애플리케이션을 정기적으로 검토하는 것은 안전한 PHP 응용 프로그램을 유지하는 데 중요한 부분입니다.
PHP 보안에 대해 더 많이 배우기 위해 어떤 리소스가 있습니까?
PHP 매뉴얼, 온라인 자습서, 보안 블로그 및 포럼을 포함하여 PHP 보안에 대해 배울 수있는 많은 리소스가 있습니다. 또한 OWASP와 같은 조직은 웹 응용 프로그램 보안에 대한 포괄적 인 안내서를 제공합니다.
위 내용은 PHP 마스터 | 상위 10 개의 PHP 보안 취약점의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!