찾다
백엔드 개발PHP 튜토리얼포커스 매직 PHP xfocus 주입 방지 정보

여기에는 깊은 기술적인 내용은 없고, 그냥 간략하게 이야기한 것뿐입니다. (구체적인 지시가 없으면 이하의 작업은 모두 PHP MySQL Apache를 기반으로 합니다.) 각종 해커가 판치는 지금, 자신의 PHP 코드에 대한 보안을 어떻게 확보하고, 프로그램과 서버의 보안을 어떻게 확보할 것인지가 매우 중요한 문제입니다. .. PHP 보안에 대한 정보를 좀 읽었지만 ASP보다 훨씬 적습니다. ㅋㅋㅋ 그래서 이러한 상황을 방지하기 위해 뭔가를 쓰고 싶었습니다. 여기에는 깊은 기술적인 내용은 없고, 그냥 간략하게 이야기한 것뿐입니다. (특별한 지시가 없으면 다음 작업은 PHP MySQL Apache 기반입니다.)
먼저 보안 문제에 대해 이야기해 보겠습니다. 먼저 두 가지 기사를 살펴보겠습니다.
http://www.xfocus.net/ 기사 /200107/227.html
http://www.xfocus.net/articles/200107/228.html
위 기사는 Security Focus의 PHP 보안에 대한 기사입니다. 기본적으로 포괄적인 소개를 제공합니다. PHP의 일부 보안 문제.
PHP로 코딩할 때 몇 가지 기본적인 보안 문제를 고려한다면 우선
1. 변수를 초기화하세요
왜 그렇게 말씀하시나요? 다음 코드를 살펴보겠습니다.
if ($admin)
{
echo '로그인 성공! ';
include('admin.php');
}
else
{
echo '당신은 관리자가 아니어서 관리할 수 없습니다! ';
}
위의 코드는 정상적으로 실행되고 문제가 없는 것으로 보입니다. 그러면 잘못된 매개변수를 제출하면 어떤 영향이 있을까요? 예를 들어, 우리 페이지가 http://www.traget.com/login.php이고 다음을 제출합니다: http://www.target.com/login.php?admin=1, 하하, 생각해 보세요. 귀하가 직접 관리자이거나 직접 관리할 수 있습니다.
물론 이런 단순한 실수는 하지 않을 수도 있고, 매우 은밀한 실수로 인해 이런 문제가 발생할 수도 있습니다. 예를 들어 최근 노출된 phpwind 1.3.6 포럼에는 관리자 권한을 직접 얻을 수 있는 취약점이 있습니다. . , 초기화되지 않은 $skin 변수가 있기 때문에 나중에 일련의 문제가 발생합니다.
그렇다면 위의 문제를 어떻게 피할 수 있을까요? 먼저 php.ini로 시작하고 php.ini에서 Register_global = off를 설정하십시오. 이는 등록된 모든 변수가 전역 변수가 아니므로 이를 피할 수 있음을 의미합니다. 하지만 우리는 서버 관리자가 아니며 코드를 통해서만 개선할 수 있습니다. 그렇다면 위 코드를 어떻게 개선할 수 있을까요? 다음과 같이 다시 작성합니다:
$admin = 0; // 초기화 변수
if ($_POST['admin_user'] && $_POST['admin_pass'])
{
// 결정 제출 해당 처리 코드는 관리자 사용자 이름과 비밀번호가 올바른지 여부입니다.
// ...
$admin = 1
}
else
{
$admin = 0;
}
if ($admin)
{
echo '로그인 성공! ';
include('admin.php');
}
else
{
echo '당신은 관리자가 아니어서 관리할 수 없습니다! ';
}
그러면 이때 http://www.target.com/login.php?admin=1 을 제출하면 작동하지 않습니다. 처음에 변수를 $admin으로 초기화했기 때문입니다. = 0이면 이 취약점을 통해 관리자 권한을 얻을 수 없습니다.
2. SQL 인젝션 방지(sql 인젝션)
SQL 인젝션은 기본적으로 지난 2년 동안 중국에서 인기를 끌었던 ASP부터 PHP까지 포함해 현재 가장 유해한 프로그램이어야 한다는 원칙이다. 필터링 없이 변수를 제출하면 주입 지점이 생성되고 악의적인 사용자가 일부 SQL 쿼리 문을 제출할 수 있어 중요한 데이터가 도난당하거나 손실 또는 손상되거나 백엔드 관리에 침입할 수 있습니다.
기본 원칙에 대해서는 다루지 않겠습니다.
http://www.4ngel.net/article/36.htm
http://www. 4ngel.net/article/30.htm
이제 기본적인 주입 침입 방법을 이해했으니 어떻게 예방할 수 있을까요? 코드부터 시작해야 합니다.
웹에 데이터를 제출하는 방법에는 두 가지가 있다는 것을 알고 있습니다. 하나는 get이고 다른 하나는 post입니다. 그래서 많은 일반적인 SQL 삽입이 get 메서드에서 시작되고, 삽입 문에는 일부 SQL 문이 포함되어 있어야 합니다. sql 문이 없는데 어떻게 진행하나요?
선택, 업데이트, 삭제, 삽입의 4가지 주요한 문이 있습니다. 그렇다면 제출한 데이터를 필터링하면 이러한 문제를 피할 수 있을까요?
그래서 정규식을 사용하여 다음 함수를 구성합니다.
/*
함수 이름: inject_check()
함수 함수: 제출된 값에 SQL 주입 문자가 포함되어 있는지 감지하고 주입을 방지하며 서버를 보호합니다. security
매개변수: $sql_str: 제출된 변수
반환값: 탐지 결과 반환, true 또는 false
함수 작성자: heiyeluren
*/
function inject_check($sql_str)
{
return eregi('select|insert|update|delete|'|/*|*|../|./|union|into|load_file|outfile', $sql_str) // 필터
}
우리 함수에서는 select, insert, update, delete, Union, into, load_file, outfile /*, ./, ../, ' 등과 같은 모든 위험한 매개변수 문자열을 필터링한 다음 제출 매개변수를 사용하면 프로그램은 다음과 같이 구성될 수 있습니다.
if (inject_check($_GET['id']))
{
exit('제출한 데이터가 불법입니다. 확인하고 다시 제출해 주세요!' );
}
else
{
$id = $_GET['id']
echo '제출된 데이터가 합법적입니다. 계속하세요! ';
}
?>
URL을 http://www.target.com/a.php?id=1로 제출하면 다음 메시지가 표시됩니다.
"제출됨 데이터가 합법적입니다. 계속하세요! "
http://www.target.com/a.php?id=1'을 제출하면 tb_name에서 *를 선택하세요.
프롬프트가 표시됩니다. "제출한 데이터입니다. 불법입니다. 확인하고 다시 제출해 주세요."
그러면 요구 사항이 충족되었습니다.
그러나 문제는 아직 해결되지 않았습니다. http://www.target.com/a.php?id=1asdfasdfasdf를 제출하면 우리는 위의 규칙을 준수하지만 위의 사항을 준수하지 않습니다. 규칙이 필요하므로 다른 상황을 확인하는 함수를 작성합니다:
/*
함수 이름: verify_id()
함수 함수: 제출된 ID 클래스 값이 유효한지 확인
매개변수: $ id: 제출된 ID 값
반환값: 처리된 ID 반환
함수 작성자: heiyeluren
*/
function verify_id($id=null)
{
if (!$id) {exit('제출된 매개변수가 없습니다!'); } // 비어 있는지 확인
elseif (inject_check($id)) {exit('제출된 매개변수가 불법입니다!') } // 주입 판단
elseif (!is_numeric($id)) { exit('제출된 매개변수가 불법입니다!') } // 숫자 판단
$id = intval($id) // 전체 형식
return $ id
}
하하, 그러면 검증을 수행할 수 있으므로 위의 프로그램 코드는 다음과 같습니다.
if (inject_check($_GET[ 'id']))
{
종료 ('제출한 데이터가 불법입니다. 확인 후 다시 제출해 주세요!');
}
else
{
$id = verify_id ($_GET['id']) // 필터 $id
를 필터링하기 위해 함수가 여기에 인용되었습니다. echo '제출된 데이터가 합법적입니다. 계속하세요! ';
}
?>
자, 여기서는 문제가 해결된 것 같습니다만, 우편으로 제출된 데이터와 대량의 데이터를 고려해 보셨나요?
예를 들어 '_', '%' 등 일부 문자는 데이터베이스에 해를 끼칠 수 있는데, 이러한 문자는 특별한 의미를 갖고 있는데, 이를 제어하면 어떻게 될까요? 또 다른 요점은 php.ini에서 Magic_quotes_gpc = off일 때 데이터베이스 규칙을 준수하지 않는 제출된 데이터가 자동으로 앞에 ''를 추가하지 않는다는 것입니다. 그런 다음 이러한 문제를 제어해야 하므로 다음 함수를 구축합니다. 🎜>/*
함수 이름: str_check()
함수: 제출된 문자열을 필터링합니다.
매개변수: $var: 처리할 문자열
반환 값: 필터링된 문자열을 반환합니다.
함수 작성자 : heiyeluren
*/
function str_check($str)
{
if (!get_magic_quotes_gpc()) // Magic_quotes_gpc가 켜져 있는지 확인
{
$str = addlashes( $str); // 필터
}
$str = str_replace("_", "_", $str) // '_' 필터링
$str = str_replace("%", "%", $str); // '%' 필터링
return $str
}
좋아요, 다시 서버를 피했습니다. 포획될 위험이 있습니다.
마지막으로 게시, 기사 작성, 뉴스 작성 등 대량의 데이터를 제출하는 상황을 고려하면 위 함수를 기반으로 다음 함수를 구축하는 데 도움이 됩니다. 🎜>/*
함수명: post_check()
함수 함수: 제출된 편집 내용 처리
매개변수: $post: 제출할 내용
반환값: $post: 필터링된 내용 반환
함수 작성자: heiyeluren
*/
function post_check($post)
{
if (!get_magic_quotes_gpc()) // Magic_quotes_gpc가 열려 있는지 확인
{
$post = addlashes($post); // Magic_quotes_gpc가 켜지지 않은 경우 제출된 데이터를 필터링합니다.
}
$post = str_replace("_", "_", $post) / / '_' 필터링;
$post = str_replace("%", "%", $post); // '%' 필터링
$post = nl2br($post); // 차량 반환
$post= htmlspecialchars($post); // html 태그 변환
return $post;
}
하하, 기본적으로 여기서는 몇 가지 상황을 겪었습니다. , 적어도 나는 두 가지 측면에 대해서만 이야기했으며 전체 보안에 대한 내용은 거의 없습니다. 보안을 향상시키기 위해 PHP 보안 구성, Apache 보안 등을 포함하여 다음 번에 더 자세히 이야기하겠습니다. 옳은 것은 전체이고, 그것이 가장 안전하다.
마지막으로 위에서 표현한 내용을 설명하겠습니다. 1. 변수를 초기화합니다. 2. 변수를 필터링해야 합니다.

위 내용은 포커스 매직 컨텐츠를 포함한 포커스 매직 PHP xfocus 방지 주입 정보를 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
로드 밸런싱이 세션 관리에 어떤 영향을 미치는지 설명하고 해결 방법을 설명하십시오.로드 밸런싱이 세션 관리에 어떤 영향을 미치는지 설명하고 해결 방법을 설명하십시오.Apr 29, 2025 am 12:42 AM

로드 밸런싱은 세션 관리에 영향을 미치지 만 세션 복제, 세션 끈적임 및 중앙 집중식 세션 스토리지로 해결할 수 있습니다. 1. 세션 복제 복사 서버 간의 세션 데이터. 2. 세션 끈은 사용자 요청을 동일한 서버로 안내합니다. 3. 중앙 집중식 세션 스토리지는 Redis와 같은 독립 서버를 사용하여 세션 데이터를 저장하여 데이터 공유를 보장합니다.

세션 잠금의 개념을 설명하십시오.세션 잠금의 개념을 설명하십시오.Apr 29, 2025 am 12:39 AM

SessionLockingIsateChniqueSureDureauser의 SessionLockingSsessionRemainSexclusivetoOneuseratatime.itiscrucialforpreptingdatacorruptionandsecurityBreachesInmulti-userApplications.sessionLockingSogingSompletEdusingserVerver-sidelockingMegynisms, unrasprantlockinj

PHP 세션에 대한 대안이 있습니까?PHP 세션에 대한 대안이 있습니까?Apr 29, 2025 am 12:36 AM

PHP 세션의 대안에는 쿠키, 토큰 기반 인증, 데이터베이스 기반 세션 및 Redis/Memcached가 포함됩니다. 1. Cookies는 클라이언트에 데이터를 저장하여 세션을 관리합니다. 이는 단순하지만 보안이 적습니다. 2. Token 기반 인증은 토큰을 사용하여 사용자를 확인합니다. 이는 매우 안전하지만 추가 논리가 필요합니다. 3. Database 기반 세션은 데이터베이스에 데이터를 저장하여 확장 성이 좋지만 성능에 영향을 줄 수 있습니다. 4. Redis/Memcached는 분산 캐시를 사용하여 성능 및 확장 성을 향상하지만 추가 일치가 필요합니다.

PHP의 맥락에서 '세션 납치'라는 용어를 정의하십시오.PHP의 맥락에서 '세션 납치'라는 용어를 정의하십시오.Apr 29, 2025 am 12:33 AM

SessionHijacking은 사용자의 SessionID를 얻음으로써 사용자를 가장하는 공격자를 말합니다. 예방 방법은 다음과 같습니다. 1) HTTPS를 사용한 의사 소통 암호화; 2) SessionID의 출처를 확인; 3) 보안 세션 생성 알고리즘 사용; 4) 정기적으로 SessionID를 업데이트합니다.

PHP의 전체 형태는 무엇입니까?PHP의 전체 형태는 무엇입니까?Apr 28, 2025 pm 04:58 PM

이 기사는 PHP에 대해 설명하고, 전체 형식, 웹 개발의 주요 용도, Python 및 Java와의 비교 및 ​​초보자를위한 학습 용이성을 자세히 설명합니다.

PHP는 양식 데이터를 어떻게 처리합니까?PHP는 양식 데이터를 어떻게 처리합니까?Apr 28, 2025 pm 04:57 PM

PHP는 유효성 검사, 소독 및 보안 데이터베이스 상호 작용을 통해 보안을 보장하면서 $ \ _ post 및 $ \ _를 사용하여 데이터 양식 데이터를 처리합니다.

PHP와 ASP.NET의 차이점은 무엇입니까?PHP와 ASP.NET의 차이점은 무엇입니까?Apr 28, 2025 pm 04:56 PM

이 기사는 PHP와 ASP.NET을 비교하여 대규모 웹 응용 프로그램, 성능 차이 및 보안 기능에 대한 적합성에 중점을 둡니다. 둘 다 대규모 프로젝트에서는 실용적이지만 PHP는 오픈 소스 및 플랫폼 독립적이며 ASP.NET,

PHP는 사례에 민감한 언어입니까?PHP는 사례에 민감한 언어입니까?Apr 28, 2025 pm 04:55 PM

PHP의 사례 감도는 다양합니다. 함수는 무감각하고 변수와 클래스는 민감합니다. 모범 사례에는 일관된 이름 지정 및 비교를위한 사례 감수 기능 사용이 포함됩니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 Linux 새 버전

SublimeText3 Linux 새 버전

SublimeText3 Linux 최신 버전

WebStorm Mac 버전

WebStorm Mac 버전

유용한 JavaScript 개발 도구

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전

PhpStorm 맥 버전

최신(2018.2.1) 전문 PHP 통합 개발 도구