Maison > Article > développement back-end > Analyse des vulnérabilités de sécurité courantes dans l'audit de code PHP
Analyse des vulnérabilités de sécurité courantes dans l'audit de code PHP
Introduction :
Avec l'application généralisée des applications Internet, PHP, en tant que langage de développement populaire, est largement utilisé pour développer diverses applications Web. Cependant, en raison de la méthode de développement relativement flexible de PHP, les vulnérabilités de sécurité ont également augmenté en conséquence. Cet article se concentrera sur l'analyse des vulnérabilités de sécurité courantes dans l'audit du code PHP et fournira quelques exemples de code pour aider les développeurs à reconnaître et à éviter ces vulnérabilités.
1. Injection SQL
L'injection SQL signifie que l'attaquant obtient ou modifie les données de la base de données en injectant des instructions SQL malveillantes dans les données saisies par l'utilisateur. Voici un exemple de vulnérabilité courante :
$username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; $result = mysqli_query($conn, $sql); if(mysqli_num_rows($result) > 0){ echo "登录成功!"; }else{ echo "用户名或密码错误!"; }
Dans ce code, le nom d'utilisateur et le mot de passe du formulaire de connexion sont directement intégrés à l'instruction SQL, la rendant vulnérable aux attaques par injection SQL. Un attaquant peut modifier la logique de l'instruction SQL en entrant une chaîne spécifique, ou même contourner la vérification de connexion directement par ' OU '1'='1
. ' OR '1'='1
来绕过登录验证。
解决方案:
为了避免SQL注入漏洞,应该使用预处理语句或绑定参数的方式来构建SQL语句。修改代码如下:
$username = $_POST['username']; $password = $_POST['password']; $sql = "SELECT * FROM users WHERE username = ? AND password = ?"; $stmt = mysqli_prepare($conn, $sql); mysqli_stmt_bind_param($stmt, "ss", $username, $password); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if(mysqli_num_rows($result) > 0){ echo "登录成功!"; }else{ echo "用户名或密码错误!"; }
二、跨站脚本攻击(XSS)
跨站脚本攻击是指攻击者通过在用户输入的数据中注入恶意脚本代码,达到窃取用户信息、篡改网页内容、发起恶意操作等目的。下面是一个常见的漏洞示例:
$name = $_GET['name']; echo "欢迎您,".$name."!";
在这个示例中,没有对用户输入的name
进行任何过滤或转义处理,攻击者可以通过构造特定的输入来注入恶意脚本,比如<script>alert('恶意代码');</script>
Afin d'éviter les vulnérabilités d'injection SQL, vous devez utiliser des instructions préparées ou des paramètres liés pour créer des instructions SQL. Modifiez le code comme suit :
$name = $_GET['name']; echo "欢迎您,".htmlspecialchars($name)."!";2. Attaque de script intersite (XSS)
L'attaque de script intersite signifie que l'attaquant injecte un code de script malveillant dans les données saisies par l'utilisateur pour voler des informations utilisateur, falsifier le contenu d'une page Web. , lancer des opérations malveillantes, etc. Objectif. Voici un exemple de vulnérabilité courante :
$targetDir = "uploads/"; $targetFile = $targetDir . basename($_FILES["file"]["name"]); if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)){ echo "文件上传成功!"; }else{ echo "文件上传失败!"; }Dans cet exemple, il n'y a pas de filtrage ni d'échappement du
nom
saisi par l'utilisateur. L'attaquant peut injecter des scripts malveillants en construisant une entrée spécifique, For. exemple, <script>alert('code malveillant');</script>
. Solution : Pour éviter les attaques XSS, les données saisies par l'utilisateur doivent être filtrées et échappées. Modifiez le code comme suit :
$targetDir = "uploads/"; $targetFile = $targetDir . basename($_FILES["file"]["name"]); $uploadOk = 1; $allowedTypes = array('jpg', 'jpeg', 'png', 'gif'); $allowedSize = 1024 * 1024; // 限制文件大小为1MB $fileType = strtolower(pathinfo($targetFile, PATHINFO_EXTENSION)); if(!in_array($fileType, $allowedTypes)){ $uploadOk = 0; echo "只允许上传jpg、jpeg、png、gif格式的文件!"; } if($_FILES["file"]["size"] > $allowedSize){ $uploadOk = 0; echo "文件大小超过了限制!"; } if($uploadOk){ if(move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile)){ echo "文件上传成功!"; }else{ echo "文件上传失败!"; } }3. Vulnérabilité de téléchargement de fichiers
La vulnérabilité de téléchargement de fichiers fait référence à une vulnérabilité dans laquelle un attaquant peut exécuter du code arbitraire en téléchargeant des fichiers malveillants. Voici un exemple de vulnérabilité courante :
rrreee
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!