나는 PHP 보안을 참조하십시오

나는 PHP 보안을 참조하십시오

민감한 사이트 디렉토리의 피할 누설, 구조의 요점을 파악 1

문제 : 오래된 사이트는 지방 분권의 index.php, register.php, login.php와 카탈로그에 일반적으로,에 등록 페이지 점프 방문 //localhost/register.php : HTTP , 쉽게 확장 및 유지 보수

해결 방법 : URL이 HTTP : // localhost를 / ACT = 등록의 드론과 dvwa 환경 설정의이 종류의 아이디어는, 변수를 통해 해당 페이지 관리로 이동하는 것입니다,

장점 : (1)가 노출되지 사이트는 절대 경로에 http 무대 : //localhost/act=admin.php 배경 디렉토리 웹 사이트를 추측하지

     2. 유지 관리가 용이, 너무 많은 코드를 수정할 필요가 없습니다 HTTP : //localhost/act=admin.php 배경 주소를 변경하려면를, 단순히 스위치 없음 코드와 배경 파일 이름을 수정

     3. 구조 계층화

     인증 4. 통합 관리. 인증은 방문자가 사이트에 액세스 할 수있는 입구에서 수행 할 수 있으며, 회원은 로그인 볼 수있는 권한을 가지고, 당신은 항목 페이지를 관리 할 수 ​​있습니다

     절대 경로 오류에 의해 페이지에 액세스 할 수 //localhost/register.php : HTTP 오류

이 페이지에서 <PHP (정의 ( 'WWW_ROOT')!)이 {헤더 ( "HTTP / 1.1 404 찾을 수 없음"); 출구;} 경우?> 구현

 

2. 준비된 문, SQL 주입을 방지하기 위해

2.1. 데이터와 코드 미분화

SQL 문은 처리를하지 않는 경우, 사용자가 SELECT * FROM로,이 문을 = 관리자를 입력 '또는 1 = 1 # 할 수 있습니다, 사용자 이름이'관리자 '암호 ='xxxxx는 '관리 XXXX 데이터를 = 어디 관리자에서 * 선택하고 사용자 이름 = 'xxxxx는' '='또는 1 = 1 # '암호 관리자는, #은 최종 결과가 참 있도록 1 = 1, 사실, 모든 데이터 쿼리를 나중에 코드, 사용자 이름 =' '거짓 댓글을 달았됩니다 나와

2.2 미리 컴파일

백 엔드 SQL 문을 '?' ''선택 * 사용자 이름 암호를 = 관리자에서 =, 대상, 방법에 컴파일이 SQL 문 STMT를 넣어 stmt-> bind_param 바인드 때문에, 위치를 사용자가 입력 한 데이터를? SQL 문의 구현이 미리 컴파일해야하므로, 클래스에 의해 운영.

Mysqli 전처리

연결 만들기 (1)

$ CONN 새로운 mysqli ($ 서버 이름, $ 이름, $ 암호, $ DBNAME을) =;

2. 전처리 클래스 STMT로 패키지, 즉

$ stmt를 = $ conn-> ( "???) (,, INSERT INTO MyGuests (이름, 성, 이메일) 가치")를 준비;

3. 바인드 매개 변수

$ stmt-> bind_param ( "SSS", $ FIRSTNAME, $ LASTNAME, $ 이메일);

4. 파라미터 값을 설정

$ FIRSTNAME의 = 'FIRSTNAME'

수행 (5)

$ stmt-> () 실행;

하지만 지금은 일반적으로 작동하는 PHP PDO SQL 사용

1.pdo 인스턴스화

$ CONN = 새로운 PDO (:;, $ 이름, $ 암호 "MySQL의 DBNAME = $ DBNAME 호스트는 $ 서버 이름 =");

2. 전처리

( "LASTNAME : : FIRSTNAME, INSERT INTO MyGuests (이름, 성, 이메일) 값 (이메일)") $ STMT = $ conn-> 제조;

3. 바인드 매개 변수

$ stmt-> bindParam ( ': FIRSTNAME', $ FIRSTNAME);

$ stmt-> bindParam ( 'LASTNAME', $ LASTNAME);

 $ stmt-> bindParam ( '이메일', $ 이메일);

4. 과제 및 실행

$ FIRSTNAME = "존";

$ LASTNAME = "미상";

$ 이메일 = "[email protected]";

$ stmt-> () 실행;

 

당신이 쿠키를 사용하지 않는 경우 (3)는 사용하지 XSS 코드를 방지하기 위해

불행하게도 XSS 주입 페이지는 피해를 줄일 수 있습니다, 쿠키를 사용하지 않습니다

 

사용자 권한 방지 CSRF 제한 (4)

예를 들어 4.1, 기사 엄지를 들면, 요청 URL 엄지 손가락 A가 사용자로 GET 요청의 디자인을 시작하는 방법은 기사입니다

HTTP // localhost를 / 행동 = :? 지원 및은 articleID은 = (12), 사용자 B로 요청을 보낼 수있는 사용자는 B도 칭찬의 포인트를 요청하려면이 링크를 사용자가 클릭을 시작

4.2post 요청. 사용하기에 너무 쉽게 Get 요청을, 경우는 다음의 코드로,이 점처럼 포스트 요청을 시작하도록 설계되었습니다 :

<양식 액션 = "HTTP : // localhost를 / 행동 = 지원"방법 = "POST">

  <input 타입 = 값 = "12"NAME = "은 articleID"를 "숨김">

  <input 타입 = "제출"값 = "赞">

</ FORM>

기사의 첫 번째 입력 아이디가 나타납니다 테이블 형태로 구성 될 수있다, 또는 아약스, 건설 또는 사용 burpsuite 공격 페이지 B로 보내기, B는 포스트 요청 엄지 손가락에 클릭을 시작합니다

4.3 코드를 제한 할 수 있습니다. 이것은이 또한 인증 코드를 입력해야처럼 현실의 감각은 또한 상황에서 아무 소용없는 사용자 경험을 줄일 수 있습니다.

4.4 토큰 인증을 증가시킨다. 방문 당 클라이언트는 HTTP : 지원 = // localhost를 / 행동 ? &은 articleID 12 = 같은 경우 엄지 손가락 성공까지 칭찬을 비교했을 때 페이지가 서버가 무작위로 토큰을 생성하고 클라이언트로 전송, 클라이언트는 엔드 포인트 및 서버 매개 변수를 전송 페이지 XSS 취약점이 토큰 값, 성공적으로 공격 JS 얻을 수 있습니다 존재 여기 경우,이 방법은 일반적이고 효과적인 수단이다

4.5 리퍼러 검증. 방문 HTTP :? // localhost를 / 행동 = 지원 및은 articleID = 12 점 때 사용자는 B 페이지로 보냈습니다을 공격 할 찬, 이상적으로는 페이지의 소스를 확인하기 위해 패키지의 인증 요청 rerferer 값, B 클릭, 리퍼러 소스 확실히 일관성 엄지 손가락으로 인해 실패하지만, 공격자는 사이트 공격자 페이지, 파일 이름, 도메인 이름의 점처럼라는 이름의 디렉토리가있을 수있다 rerferer 탐지를 수정할 수 있습니다

 

5 엄격하게 업로드 유형을 제어

5.1 검증 전면 신뢰할 수없는

5.2mime 검증 신뢰할 수없는

5.3 허용 된 사이트 목록 확인은, 같은 배열 ( 'JPG', 'GIF', 'PNG', 'BMP'), 업로드하기 전에 배열라는 이름의 파일 요소로, 파일 이름을 가지고,하지만 조심 파싱 취약점이 될 것입니다

업로드 된 파일의 현재 일반 명명 규칙 + 흰색 + 난수 접미사 목록 5.4 이름 바꾸기는 업로드 WEBSHELL 그렇게하더라도, 날짜와 시간으로 이름이 있지만, 공격자가 파일 이름을 추측 할 수도 있기 때문에 액세스 WEBSHELL을 방지하면서됩니다

5.5 PHP 코드의 실행을 금지, 당신은 문서 금지하는 실행 WEBSHELL을 참조 할 수 있습니다

 

6. 암호화 혼동의 자바 스크립트 코드는 공격 임계 값을 개선하기 위해

대부분의 XSS 취약점은 로컬 독서 웹 페이지의 소스 코드, 읽기 임계 값을 개선하기 위해 암호화 자바 스크립트 코드를 발견

 

데이터베이스 중요한 정보에 저장 7. 고급 해시 알고리즘

일반적인 방법은 해시를 해독 할

7.1 무지개 테이블. 당신은 종종이 파일 시스템이 샘을 해킹하는 것으로, g의 다운로드 수백 공식 웹 사이트로 이동 할 수 있습니다

7.2 MD5 사이트 바이두는보고, 간단한 암호 해독을해야합니다

 

8. 보안 코드

몇 가지 방법을 볼 수 있습니다 보안 코드 검증을 확인합니다

프론트 엔드는 코드 검증을 생성하는 경우 8.1, 당신 우회 캡처 할 수 있습니다

하나의 유효한 코드가있는 경우 8.2, 코드는 하나의 재사용 할 수

클라이언트 8.3 요약 코드 출력 공격자는 JS 코드에 의해 획득 될 수있다

8.4 약한 코드

오픈 소스 tessertact OCR의 결과로 너무 단순 인증 코드, 식별 할 수 있습니다. 여기에 새로운 바이 패스 장치 인식 12,306입니다

티켓 코드의 예

참고 링크 : HTTPS : //www.leavesongs.com/PENETRATION/php-secure.html

추천

출처www.cnblogs.com/qzdlp/p/12134324.html