PHP 보안 기능: Strip_tags, filter_var, Md5 및 sha1
잠재적인 보안 위협
이들은 기본적으로 시스템을 공격할 수 있는 두 그룹의 사람들입니다.
- 해커 – 승인되지 않은 데이터에 접근하거나 애플리케이션을 방해하려는 의도를 가지고 있습니다.
- 사용자 – 양식에 잘못된 매개변수를 무고하게 입력하여 웹사이트나 웹 애플리케이션에 부정적인 영향을 미칠 수 있습니다.
우리가 조심해야 할 공격 유형은 다음과 같습니다.
SQL 주입 – 이러한 유형의 공격은 유해한 코드를 추가합니다. SQL 진술.
이는 사용자 입력 양식이나 변수를 사용하는 URL을 사용하여 수행됩니다.
추가된 코드는 SQL 문의 WHERE 절에 있는 조건을 주석으로 처리합니다. 추가된 코드도 가능합니다.
- 항상 참인 조건을 삽입하세요.
- 테이블에서 데이터 삭제
- 테이블의 데이터 업데이트
- 이러한 유형의 공격은 일반적으로 애플리케이션에 대한 무단 액세스를 얻는 데 사용됩니다.
크로스 사이트 스크립팅 – 이러한 유형의 공격은 일반적으로 유해한 코드를 삽입합니다. Java스크립트. 이는 연락처 및 댓글 양식과 같은 사용자 입력 양식을 사용하여 수행됩니다. 이는 다음을 위해 수행됩니다.
- 다음과 같은 민감한 정보를 검색합니다. 쿠키 데이터
- 사용자를 다른 URL로 리디렉션합니다.
- 다른 위협으로는 PHP 코드 삽입, 셸 삽입, 이메일 삽입, 스크립트 소스 등이 있습니다. Code 정보 공개 등
PHP 애플리케이션 보안 우수 사례
이제 PHP 개발 시 고려해야 할 몇 가지 PHP 보안 모범 사례를 살펴보겠습니다.ping 우리의 응용 프로그램.
PHP 스트립_태그
Strip_tags 함수는 HTML을 제거하고, JavaScript 또는 문자열의 PHP 태그.
이 기능은 크로스 사이트 스크립팅과 같은 공격으로부터 애플리케이션을 보호해야 할 때 유용합니다.
사용자의 의견을 받아들이는 애플리케이션을 생각해 보겠습니다.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
phptuts 폴더에 comments.php를 저장했다고 가정하고 URL을 찾아보세요.http://localhost/phptuts/comments.php
사용자 입력으로 다음을 받았다고 가정해 보겠습니다. alert(‘Your site sucks!’);
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo "<h4>My Commenting System</h4>";
echo $user_input;
?>
URL로 이동 http://localhost/phptuts/comments.php
이제 Strip_tags 기능을 사용하여 이러한 공격으로부터 애플리케이션을 보호해 보겠습니다.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo strip_tags($user_input);
?>
URL로 이동 http://localhost/phptuts/comments.php
PHP filter_var 함수
filter_var 함수는 데이터의 유효성을 검사하고 삭제하는 데 사용됩니다.
유효성 검사는 데이터가 올바른 유형인지 확인합니다. 문자열에 대한 숫자 유효성 검사는 잘못된 결과를 반환합니다.
삭제는 불법 문자를 제거하는 것입니다. 현.
전체 참조를 보려면 이 링크를 확인하세요. filter_var
코드는 댓글 시스템용입니다.
filter_var 함수와 FILTER_SANITIZE_STRIPPED 상수를 사용하여 태그를 제거합니다.
<?php
$user_input = "<script>alert('Your site sucks!');</script>";
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
?>
출력:
alert('Your site sucks!');
mysqli_real_escape_string 함수 이 함수는 애플리케이션을 SQL 주입으로부터 보호하는 데 사용됩니다.
사용자 ID와 비밀번호를 검증하는 다음과 같은 SQL 문이 있다고 가정해 보겠습니다.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
악의적인 사용자는 사용자 ID 텍스트 상자에 다음 코드를 입력할 수 있습니다. ' 또는 1 = 1 — 그리고 비밀번호 텍스트 상자에 1234를 입력합니다. 인증 모듈을 코딩해 보겠습니다.
<?php $uid = "' OR 1 = 1 -- "; $pwd = "1234"; $sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';"; echo $sql; ?>
최종 결과는 다음과 같습니다.
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
이리,
- "SELECT * FROM users WHERE user_id = ""는 빈 사용자 ID를 테스트합니다.
- "' OR 1 = 1 "은 항상 참인 조건입니다.
- "-"는 비밀번호를 테스트하는 부분을 설명합니다.
위 쿼리는 모든 사용자를 반환합니다. 이제 mysqli_real_escape_string 함수를 사용하여 로그인 모듈을 보호하겠습니다.
<?php
$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");
$pwd = mysqli_real_escape_string("1234");
$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";
echo $sql;
?>
위의 코드는 출력됩니다
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
주의 사항 두 번째 작은따옴표는 이스케이프 처리되었으며 사용자 ID의 일부로 처리되며 비밀번호는 주석 처리되지 않습니다.
PHP Md5 및 PHP sha1
Md5는 Message Digest 5의 약어이고 sha1은 Secure Hash Algorithm 1의 약어입니다.
둘 다 문자열을 암호화하는 데 사용됩니다.
문자열이 암호화되면 이를 해독하는 것은 지루한 작업입니다.
Md5와 sha1은 데이터베이스에 비밀번호를 저장할 때 매우 유용합니다.
아래 코드는 md5 및 sha1의 구현을 보여줍니다.
<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>
hashes.php 파일을 phptuts 폴더에 저장했다고 가정하고 URL을 찾아보세요.
위의 해시에서 볼 수 있듯이 공격자가 데이터베이스에 대한 액세스 권한을 얻은 경우 로그인에 필요한 비밀번호를 여전히 알 수 없습니다.
제품 개요
- 보안은 우발적이고 악의적인 공격으로부터 애플리케이션을 보호하기 위해 마련된 조치를 의미합니다.
- Strip_tags 함수는 다음과 같은 태그를 제거하는 데 사용됩니다. 입력 데이터에서
- filter_var 함수는 입력 데이터의 유효성을 검사하고 PHP를 삭제합니다.
- mysqli_real_escape_string은 SQL 문을 살균하는 데 사용됩니다. 문장에서 악성 문자를 제거합니다.
- MD5와 SHA1은 모두 비밀번호를 암호화하는 데 사용됩니다.




