> 백엔드 개발 > PHP 튜토리얼 > PHP 백엔드 디자인: 보안 및 권한 제어 탐색

PHP 백엔드 디자인: 보안 및 권한 제어 탐색

WBOY
풀어 주다: 2024-01-19 10:16:01
원래의
821명이 탐색했습니다.

PHP 백엔드 디자인: 보안 및 권한 제어 탐색

인터넷과 웹 애플리케이션의 인기로 인해 PHP는 가장 인기 있는 백엔드 언어 중 하나가 되었습니다. 그러나 PHP 백엔드 개발에는 매우 중요한 보안 및 권한 제어 문제가 포함됩니다.

이 기사에서는 PHP 백엔드 디자인의 보안 및 권한 제어를 살펴보고 독자가 이러한 문제를 더 잘 이해할 수 있도록 구체적인 코드 예제를 제공합니다.

1. 보안 문제

PHP 보안 문제는 주로 다음과 같은 측면을 포함합니다.

  1. SQL 주입 공격

SQL 주입은 웹 애플리케이션의 취약점을 악용하는 방법으로 조작이 가능합니다. SQL 쿼리 입력을 사용하여 데이터를 조작하거나 봅니다. SQL 주입 공격을 방지하려면 코드를 작성하는 동안 자신을 보호해야 합니다.

다음은 간단한 SQL 인젝션 예시입니다.

$username = $_POST['username'];

$sql = "SELECT * FROM user WHERE username='$username'";
로그인 후 복사

이 예시에서 공격자는 ' 또는 1=1 --를 입력하여 사용자 입력을 우회하고 전체 사용자 테이블의 데이터를 얻을 수 있습니다. . 이런 일이 발생하지 않도록 하려면 PHP에서 준비된 명령문을 사용해야 합니다. ' or 1=1 -- 的方式来绕过用户输入的内容,并获取到整张用户表的数据。为了防止这种情况发生,我们需要用到PHP中的预处理语句。

修改后的示例代码如下:

$username = $_POST['username'];

$stmt = $pdo->prepare("SELECT * FROM user WHERE username=?");
$stmt->execute([$username]);

$user = $stmt->fetch();
로그인 후 복사

这个示例中,我们使用了PDO中的预处理语句,将用户输入的内容与SQL语句分离开来。这样可以有效地避免SQL注入的攻击。

  1. XSS攻击

XSS攻击是一种利用Web应用程序的漏洞,攻击者可以将HTML标签或JavaScript代码注入到用户浏览器中的技术。为了避免XSS攻击,我们需要使用htmlspecialchars()函数来过滤用户输入的内容。

以下是一个简单的XSS攻击示例:

echo "Welcome, " . $_GET['username'] . "!";
로그인 후 복사

攻击者可以传递一个JavaScript代码作为username的参数,例如:http://localhost/welcome.php?username=<script>alert("XSS!")</script>

수정된 샘플 코드는 다음과 같습니다.

echo "Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "!";
로그인 후 복사

이 예제에서는 PDO에서 준비된 명령문을 사용하여 사용자 입력 내용과 SQL 문을 구분합니다. 이를 통해 SQL 주입 공격을 효과적으로 방지할 수 있습니다.

    XSS 공격
XSS 공격은 웹 애플리케이션의 취약점을 악용하고 공격자가 HTML 태그나 JavaScript 코드를 사용자의 브라우저에 삽입할 수 있도록 하는 기술입니다. XSS 공격을 방지하려면 htmlspecialchars() 함수를 사용하여 사용자 입력을 필터링해야 합니다.

다음은 간단한 XSS 공격 예입니다.

<!-- 在攻击者的网站上 -->
<img  src="http://localhost/delete.php?id=1" alt="PHP 백엔드 디자인: 보안 및 권한 제어 탐색" >
로그인 후 복사

공격자는 JavaScript 코드를 사용자 이름 매개변수로 전달할 수 있습니다. 예: http://localhost/welcome.php?username=<script>alert( " XSS!")</script>를 사용하여 사용자 브라우저에 경고 상자가 나타날 수 있도록 합니다.

이런 일이 발생하지 않도록 하려면 htmlspecialchars() 함수를 사용하여 사용자가 입력한 콘텐츠를 필터링해야 합니다. 수정된 코드는 다음과 같습니다.

<!-- 在表单中添加CSRF令牌 -->
<form action="delete.php" method="POST">
  <input type="hidden" name="token" value="<?php echo md5(session_id()); ?>">
  <input type="hidden" name="id" value="1">
  <button type="submit" class="btn btn-danger">删除</button>
</form>
로그인 후 복사

이 예제에서는 XSS 공격을 피할 수 있도록 사용자가 입력한 내용을 필터링하기 위해 htmlspecialchars() 함수를 사용합니다.

CSRF 공격

CSRF 공격은 웹 애플리케이션을 악용하는 일종의 취약점입니다. 공격자는 사용자가 알지 못하는 사이에 특정 작업을 수행할 수 있는 페이지나 URL을 구성할 수 있습니다. CSRF 공격을 방지하려면 CSRF 토큰이나 동일 출처 정책을 사용해야 합니다.
  1. 다음은 간단한 CSRF 공격의 예입니다.
  2. if (! check_user_permission('admin')) {
      die("Permission denied!");
    }
    
    // 进行敏感操作
    로그인 후 복사
공격자는 사용자에게 이메일을 보내거나 블로그 게시물을 게시하여 사용자가 이 페이지를 방문하도록 허용합니다. 이 페이지는 사용자 모르게 ID 1의 레코드를 삭제합니다.

이런 일이 발생하지 않도록 하려면 CSRF 토큰이나 동일 출처 정책을 사용해야 합니다. 샘플 코드는 다음과 같습니다.

// 用户与角色映射关系
$users = [
  'Alice' => ['admin'],
  'Bob' => ['editor'],
  'Charlie' => ['editor', 'viewer'],
];

// 检查当前用户的角色
function get_user_roles($username) {
  global $users;
  return $users[$username] ?? [];
}

// 检查用户是否有权限
function check_user_permission($username, $permission) {
  $roles = get_user_roles($username);
  foreach ($roles as $role) {
    if (isset($permissions[$role]) && $permissions[$role][$permission]) {
      return true;
    }    
  }
  return false;
}

// 定义角色与权限映射关系
$permissions = [
  'admin' => ['create', 'update', 'delete'],
  'editor' => ['create', 'update'],
  'viewer' => ['view'],
];

// 检查用户是否有权限
if (!check_user_permission('Alice', 'delete')) {
  die("Permission denied!");
}

// 进行敏感操作
로그인 후 복사
이 예에서는 CSRF 토큰을 사용하여 악의적인 공격자가 페이지나 URL을 구성하여 시스템을 공격하는 것을 방지합니다.

2. 권한 제어 문제
  1. PHP 권한 제어 문제는 주로 다음 측면과 관련됩니다:

인증

시스템 보안을 보장하려면 사용자의 신원을 인증해야 합니다. 민감한 작업을 처리하기 전에 인증이 필요합니다.

샘플 코드는 다음과 같습니다.

rrreee

이 예제에서는 check_user_permission() 함수를 사용하여 사용자에게 조작 권한이 있는지 확인합니다. 사용자에게 권한이 없으면 작업이 종료됩니다.

🎜Role Control🎜🎜🎜 시스템의 다양한 사용자에게는 다양한 권한과 작업 범위가 필요할 수 있습니다. 이러한 권한 제어를 달성하기 위해 일반적으로 역할 제어 방법이 사용됩니다. 🎜🎜샘플 코드는 다음과 같습니다. 🎜rrreee🎜이 예제에서는 역할과 권한 간의 매핑 관계를 정의하고 check_user_permission() 함수를 사용하여 사용자에게 작업 권한이 있는지 확인합니다. 사용자에게 권한이 없으면 작업이 종료됩니다. 🎜🎜위는 PHP 백엔드 디자인의 보안 및 권한 제어 문제에 대한 일부 논의입니다. 개발자는 실제 개발 프로세스 중에 이러한 문제에 대한 학습과 이해를 강화하고 코드 작성 시 보안 및 권한 제어에 대한 모범 사례를 준수하는 것이 좋습니다. 🎜🎜더 궁금한 점이 있거나 추가 지원이 필요하면 언제든지 문의해 주세요. 🎜

위 내용은 PHP 백엔드 디자인: 보안 및 권한 제어 탐색의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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