> 백엔드 개발 > PHP 튜토리얼 > PHP 예방 주입 공격 예시 분석_php 스킬

PHP 예방 주입 공격 예시 분석_php 스킬

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-05-16 20:33:13
원래의
1310명이 탐색했습니다.

이 글에서는 PHP의 인젝션 공격 방지 방법을 자세히 분석하여 예시를 제공합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.

PHP addlashes() 함수 --단일 아포스트로피와 슬래시 이스케이프

PHP 문자열 함수

정의 및 사용법

addlashes() 함수는 지정된 사전 정의 문자 앞에 백슬래시를 추가합니다.
사전 정의된 문자는 다음과 같습니다.
작은따옴표(')
큰따옴표(")
백슬래시()
NULL
구문:

슬래시 추가(문자열)

매개변수 설명
参数  描述
string 必需。规定要检查的字符串。
문자열 필수입니다. 확인할 문자열을 지정합니다.

팁 및 참고 사항

팁: 이 함수는 데이터베이스 및 데이터베이스 쿼리 문에 저장된 문자열에 대한 적절한 문자열을 준비하는 데 사용할 수 있습니다.
참고: 기본적으로 PHP 지시어 Magic_quotes_gpc가 켜져 있으며 모든 GET, POST 및 COOKIE 데이터에 대해 자동으로 addlashes()를 실행합니다. Magic_quotes_gpc에 의해 이스케이프된 문자열에는 addlashes()를 사용하지 마십시오. 이렇게 하면 이중 이스케이프가 발생하게 됩니다. 이러한 상황이 발생하면 get_magic_quotes_gpc() 함수를 사용하여 이를 감지할 수 있습니다.



이 예에서는 문자열의 미리 정의된 문자에 백슬래시를 추가하려고 합니다.

코드 복사 코드는 다음과 같습니다.
$str = "존 아담스는 누구입니까?";
echo $str . " 데이터베이스 쿼리에서는 안전하지 않습니다.
";
echo addlashes($str) . " 데이터베이스 쿼리에서는 안전합니다.";
?>

출력:
John Adams는 누구입니까? 데이터베이스 쿼리에서는 안전하지 않습니다.
John Adams는 누구입니까? 데이터베이스 쿼리에서는 안전합니다.

get_magic_quotes_gpc 함수

코드 복사 코드는 다음과 같습니다.
function html($str)
{
$str = get_magic_quotes_gpc()?$str:addslashes($str);
$str;
반환 }

get_magic_quotes_gpc:
PHP 환경 변수 Magic_quotes_gpc의 값을 가져옵니다.
구문: long get_magic_quotes_gpc(void);
반환 값: 긴 정수
함수 유형: PHP 시스템 함수

콘텐츠 설명:

이 함수는 PHP 환경에 설정된 Magic_quotes_gpc(GPC, Get/Post/Cookie) 변수의 값을 가져옵니다. 0을 반환하면 이 기능이 꺼지고, 1을 반환하면 이 기능이 켜집니다. Magic_quotes_gpc가 활성화되면 모든 '(작은따옴표), "(큰따옴표), (백슬래시) 및 null 문자는 자동으로 백슬래시가 포함된 오버플로 문자로 변환됩니다.

슬래시 추가 --백슬래시를 사용하여 문자열 인용

설명:

문자열 추가( string str)
데이터베이스 쿼리문 등의 특정 문자 앞에 백슬래시가 추가된 문자열을 반환합니다. 이러한 문자는 작은따옴표('), 큰따옴표("), 백슬래시() 및 NUL(NULL 문자)입니다.

addlashes()를 사용하는 예는 데이터베이스에 데이터를 입력할 때입니다. 예를 들어 O'reilly라는 이름을 데이터베이스에 삽입하려면 해당 이름을 이스케이프해야 합니다. 대부분의 데이터베이스는 이스케이프 문자로 O'reilly를 사용합니다. 이렇게 하면 추가 항목을 삽입하지 않고 데이터를 데이터베이스에 넣습니다. PHP 지시문 Magic_quotes_sybase가 on으로 설정되면 '를 삽입하면 '으로 이스케이프된다는 의미입니다.

기본적으로 PHP 명령인 Magic_quotes_gpc가 켜져 있으며, 이는 주로 모든 GET, POST 및 COOKIE 데이터에 대해 addlashes()를 자동으로 실행합니다. Magic_quotes_gpc에 의해 이스케이프된 문자열에는 addlashes()를 사용하지 마십시오. 이렇게 하면 이중 이스케이프가 발생하게 됩니다. 이러한 상황이 발생하면 get_magic_quotes_gpc() 함수를 사용하여 이를 감지할 수 있습니다.

예제 1. addlashes() 예

코드 복사 코드는 다음과 같습니다.
$str = "당신의 이름이 O'reilly입니까?";
// 출력: 당신의 이름은 O'reilly입니까?
echo addlashes($str);
?>
get_magic_quotes_gpc()

이 함수는 PHP 환경 구성에서 Magic_quotes_gpc(GPC, Get/Post/Cookie) 변수의 값을 가져옵니다. 0을 반환하면 이 기능이 꺼지고, 1을 반환하면 이 기능이 켜집니다. Magic_quotes_gpc가 켜져 있으면 모든 '(작은따옴표), "(큰따옴표), (백슬래시) 및 null 문자가 자동으로 백슬래시가 포함된 오버플로 문자로 변환됩니다.

Magic_quotes_gpc

php.ini의 Magic_quotes_gpc에 대해 off로 설정해야 하나요, 아니면 on으로 설정해야 하나요?

개인적인 의견이므로 ON으로 설정해야 합니다

요약은 다음과 같습니다.

1. Magic_quotes_gpc=on의 경우

입출력 데이터베이스의 문자열 데이터로는 아무것도 할 수 없습니다
addlashes() 및 Stripslashes() 작업의 경우 데이터가 정상적으로 표시됩니다.

이때 입력 데이터에 addlashes()를 수행하면
그런 다음 출력 시 초과 백슬래시를 제거하려면 Stripslashes()를 사용해야 합니다.

2.magic_quotes_gpc=off인 경우

입력 데이터를 처리하려면 addlashes()를 사용해야 하지만, 출력 형식을 지정하기 위해 Stripslashes()를 사용할 필요는 없습니다.
addlashes()는 백슬래시를 데이터베이스에 기록하지 않기 때문에 mysql이 sql 문의 실행을 완료하는 데만 도움이 됩니다.

보충:

magic_quotes_gpc 범위: 웹 클라이언트 서버, 작업 시간: 스크립트가 실행될 때와 같이 요청이 시작될 때.
Magic_quotes_runtime 범위: 파일에서 읽은 데이터 또는 exec() 실행 결과 또는 SQL 쿼리에서 얻은 데이터 작업 시간: 스크립트가 실행 상태에서 생성된 데이터에 액세스할 때마다

코드:

코드 복사 코드는 다음과 같습니다.
/*
때로는 양식에 하나 이상의 변수(아마도 12개 또는 수십 개)가 제출되는 경우가 있습니다. 그러면 addlashes()를 계속해서 복사/붙여넣기하는 것이 조금 번거롭나요? 양식이나 URL에서 얻은 데이터가 $_POST, $_GET)와 같은 배열 형태로 나타나므로 "군대를 쓸어버릴" 수 있는 기능을 사용자 정의하세요
*/
함수 인용문($content)
{
//magic_quotes_gpc=Off인 경우 처리를 시작합니다
if (!get_magic_quotes_gpc()) {
//$content가 배열인지 확인
if (is_array($content)) {
//$content가 배열이면 각 요소를 처리합니다.
foreach ($content as $key=>$value) {
$content[$key] = 추가속시($value)
}
} 다른 {
//$content가 배열이 아니면 한 번만 처리됩니다.
addlashes($content)
}
} 다른 {
//magic_quotes_gpc=On이면 처리되지 않습니다
}
//$content 반환
$content 반환
}
?>

이 기사가 모든 사람의 PHP 프로그래밍 설계에 도움이 되기를 바랍니다.

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿