Avec la popularité d'Internet et des applications Web, PHP est devenu l'un des langages backend les plus populaires. Cependant, le développement du backend PHP implique des problèmes de sécurité et de contrôle des autorisations très importants.
Dans cet article, nous explorerons la sécurité et le contrôle des autorisations dans la conception du backend PHP et fournirons des exemples de code spécifiques pour aider les lecteurs à mieux comprendre ces problèmes.
1. Problèmes de sécurité
Lorsqu'il s'agit de problèmes de sécurité PHP, cela implique principalement les aspects suivants :
L'injection SQL est une méthode qui exploite les vulnérabilités des applications Web et peut être manipulée. Une méthode d'attaque qui utilise l'entrée de requête SQL pour manipuler ou afficher des données. Pour éviter les attaques par injection SQL, nous devons nous protéger lors de l'écriture du code.
Ce qui suit est un exemple simple d'injection SQL :
$username = $_POST['username']; $sql = "SELECT * FROM user WHERE username='$username'";
Dans cet exemple, l'attaquant peut contourner la saisie de l'utilisateur en entrant ' ou 1=1 --
et obtenir les données de l'ensemble de la table utilisateur. . Pour éviter que cela ne se produise, nous devons utiliser des instructions préparées en 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注入的攻击。
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') . "!";
<!-- 在攻击者的网站上 --> <img src="http://localhost/delete.php?id=1" alt="Conception du backend PHP : exploration de la sécurité et du contrôle des autorisations" >
http://localhost/welcome.php?username=<script>alert( " XSS!")</script>
, afin qu'une boîte d'avertissement puisse apparaître dans le navigateur de l'utilisateur. Afin d'éviter que cela ne se produise, nous devons utiliser la fonction htmlspecialchars() pour filtrer le contenu saisi par l'utilisateur. Le code modifié est le suivant : <!-- 在表单中添加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>
Attaque CSRF
Une attaque CSRF est un type de vulnérabilité qui exploite une application Web. Un attaquant peut construire une page ou une URL qui permet aux utilisateurs d'effectuer certaines actions à leur insu. Pour éviter les attaques CSRF, nous devons utiliser des jetons CSRF ou la même politique d'origine.if (! check_user_permission('admin')) { die("Permission denied!"); } // 进行敏感操作
// 用户与角色映射关系 $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!"); } // 进行敏感操作
Authentification
Afin d'assurer la sécurité du système, l'identité de l'utilisateur doit être authentifiée. L'authentification est requise avant de traiter des opérations sensibles. L'exemple de code est le suivant :rrreee
Dans cet exemple, nous utilisons la fonction check_user_permission() pour vérifier si l'utilisateur a l'autorisation d'opérer. Si l'utilisateur n'a pas l'autorisation, l'opération est terminée. 🎜Contrôle des rôles🎜🎜🎜 Différents utilisateurs du système peuvent avoir besoin de différentes autorisations et étendues d'opération. Afin d’obtenir ce type de contrôle des autorisations, la méthode de contrôle des rôles est généralement utilisée. 🎜🎜L'exemple de code est le suivant : 🎜rrreee🎜Dans cet exemple, nous définissons la relation de mappage entre les rôles et les autorisations, et utilisons la fonction check_user_permission() pour vérifier si l'utilisateur a l'autorisation d'opérer. Si l'utilisateur n'a pas l'autorisation, l'opération est terminée. 🎜🎜Ce qui précède est une discussion sur les problèmes de sécurité et de contrôle des autorisations dans la conception du backend PHP. Nous recommandons aux développeurs d'améliorer leur apprentissage et leur compréhension de ces problèmes au cours du processus de développement lui-même, et d'adhérer aux meilleures pratiques en matière de sécurité et de contrôle des autorisations lors de l'écriture du code. 🎜🎜Si vous avez d'autres questions ou avez besoin d'aide supplémentaire, n'hésitez pas à nous contacter. 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!