PHP 보안 기능: Strip_tags, filter_var, Md5 및 sha1

잠재적인 보안 위협

이들은 기본적으로 시스템을 공격할 수 있는 두 그룹의 사람들입니다.

  • 해커 – 승인되지 않은 데이터에 접근하거나 애플리케이션을 방해하려는 의도를 가지고 있습니다.
  • 사용자 – 양식에 잘못된 매개변수를 무고하게 입력하여 웹사이트나 웹 애플리케이션에 부정적인 영향을 미칠 수 있습니다.

더 폴로wing 우리가 주의해야 할 공격 유형은 다음과 같습니다.

SQL 주입 – 이러한 유형의 공격은 유해한 코드를 추가합니다. SQL 진술.

이는 사용자 입력 양식이나 변수를 사용하는 URL을 사용하여 수행됩니다.

추가된 코드는 SQL 문의 WHERE 절에 있는 조건을 주석으로 처리합니다. 추가된 코드도 가능합니다.

  • 항상 참인 조건을 삽입하세요.
  • 테이블에서 데이터 삭제
  • 테이블의 데이터 업데이트
  • 이러한 유형의 공격은 일반적으로 애플리케이션에 대한 무단 액세스를 얻는 데 사용됩니다.

크로스 사이트 스크립팅 – 이러한 유형의 공격은 일반적으로 JavaScript에 유해한 코드를 삽입합니다. 이는 문의 양식 및 의견 양식과 같은 사용자 입력 양식을 사용하여 수행됩니다. 이는 다음과 같이 수행됩니다.

  • 다음과 같은 민감한 정보를 검색합니다. 쿠키 데이터
  • 사용자를 다른 URL로 리디렉션합니다.
  • 다른 위협으로는 PHP 코드 주입, 셸 주입, E 등이 있습니다.mail 인젝션, 스크립트 소스코드 공개 등

PHP 애플리케이션 보안 모범 사례

이제 애플리케이션을 개발할 때 고려해야 할 몇 가지 PHP 보안 모범 사례를 살펴보겠습니다.

PHP 스트립_태그

Strip_tags 함수는 HTML을 제거하고, 자바 스크립트 또는 문자열의 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

PHP 스트립_태그

당신이 follo를 받았다고 가정하자wing 사용자 입력으로 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

PHP 스트립_태그

이제 Strip_tags 기능을 사용하여 이러한 공격으로부터 애플리케이션을 보호해 보겠습니다.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

URL로 이동 http://localhost/phptuts/comments.php

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 주입으로부터 애플리케이션을 보호하는 데 사용됩니다.

우리가 follo를 가지고 있다고 가정하자wing 사용자 ID와 비밀번호의 유효성을 검사하는 SQL 문입니다.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

악의적인 사용자가 팔로우에 들어갈 수 있습니다.wing 사용자 ID 텍스트의 코드 box. ' OR 1 = 1 — 그리고 비밀번호 텍스트에 1234 box 인증 모듈을 코딩해 봅시다

<?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을 찾아보세요.

PHP Md5 및 PHP sha1

위의 해시에서 볼 수 있듯이 공격자가 데이터베이스에 대한 액세스 권한을 얻은 경우 로그인에 필요한 비밀번호를 여전히 알 수 없습니다.

요약

  • 보안은 우발적이고 악의적인 공격으로부터 애플리케이션을 보호하기 위해 마련된 조치를 의미합니다.
  • Strip_tags 함수는 다음과 같은 태그를 제거하는 데 사용됩니다. 입력 데이터에서
  • filter_var 함수는 입력 데이터의 유효성을 검사하고 PHP를 삭제합니다.
  • mysqli_real_escape_string은 SQL 문을 삭제하는 데 사용됩니다. 진술에서 악의적인 문자를 제거합니다.
  • MD5와 SHA1은 모두 비밀번호를 암호화하는 데 사용됩니다.