Introduction
Pour fournir des services Internet, vous devez toujours maintenir une conscience de la sécurité lors du développement du code. Il est possible que la plupart des scripts PHP ne se soucient pas des problèmes de sécurité, en grande partie parce que de nombreux programmeurs inexpérimentés utilisent ce langage. Cependant, il n’y a aucune raison pour que vous ayez des politiques de sécurité incohérentes en raison de l’incertitude concernant votre code. Lorsque vous placez quelque chose impliquant de l'argent sur un serveur, il y a une chance que quelqu'un essaie de le pirater. Créez un programme de forum ou toute forme de panier d'achat, et la possibilité d'être attaqué devient infinie.
Tutoriel vidéo PHP recommandé : https://www.php.cn/course/list/29/type/2.html
Contexte
Pour assurer la sécurité de votre contenu Web, voici quelques directives générales de sécurité :
1 Ne faites pas confiance aux attaques de formulaire
. Le formulaire est simple. En utilisant une simple astuce JavaScript, vous pouvez limiter votre formulaire pour n'autoriser que les nombres de 1 à 5 dans le champ d'évaluation. Si quelqu'un désactive JavaScript dans son navigateur ou soumet des données de formulaire personnalisé, votre validation côté client échouera.
Les utilisateurs interagissent avec votre script principalement via les paramètres du formulaire, ils constituent donc le plus gros risque de sécurité. Que devriez-vous apprendre ? Dans les scripts PHP, validez toujours les données transmises à n'importe quel script PHP. Dans cet article, nous vous montrons comment analyser et vous protéger contre les attaques de script intersite (XSS), qui peuvent détourner les informations d'identification des utilisateurs (ou pire encore). Vous verrez également comment empêcher les attaques par injection MySQL qui peuvent altérer ou détruire vos données.
2. Ne faites pas confiance aux utilisateurs
Supposez que chaque élément de données obtenu par votre site Web est rempli de code nuisible. Nettoyez chaque partie, même si vous pensez que personne ne tentera de pirater votre site.
3. Désactivez les variables globales
La plus grande faille de sécurité que vous puissiez rencontrer est l'activation du paramètre de configuration register_globals
. Heureusement, PHP 4.2 et versions ultérieures désactivent cette configuration par défaut. Si register_globals
est activé, vous pouvez désactiver cette fonctionnalité en modifiant la variable register_globals
sur Off dans votre fichier php.ini :
register_globals = Off
Les programmeurs débutants trouvent pratique d'enregistrer des variables globales, mais ils ne le font pas. Je ne sais pas comment. Réalisez à quel point cette configuration peut être dangereuse. Un serveur avec des variables globales activées attribuera automatiquement toute forme de paramètre à la variable globale. Pour comprendre comment cela fonctionne et pourquoi c'est dangereux, regardons un exemple.
Supposons que vous disposiez d'un script appelé process.php
qui insère les données du formulaire dans votre base de données. Le formulaire initial ressemble à ceci :
<input name="username" type="text" size="15" maxlength="64">
Lors de l'exécution de process.php
, PHP avec l'enregistrement des variables globales activé attribuera le paramètre à la variable $username
. Cela permettra d'économiser des frappes par rapport à l'accès via $_POST['username']
ou $_GET['username']
. Malheureusement, cela vous pose également un problème de sécurité, car PHP définira la valeur de la variable sur la valeur envoyée au script via les paramètres GET ou POST si vous n'initialisez pas explicitement la variable et que vous ne voulez pas que quiconque le fasse. Pour le faire fonctionner, il y aura un gros problème.
Regardez le script ci-dessous. Si la valeur de la variable $authorized
est vraie, elle affichera les données vérifiées à l'utilisateur. Normalement, la valeur de la variable authenticated_user()
ne sera définie sur true que si l'utilisateur réussit correctement la validation hypothétique de la fonction $authorized
. Mais si vous activez register_globals
, n'importe qui peut envoyer un paramètre GET tel que authorized=1
pour le remplacer :
<?php // Define $authorized = true only if user is authenticated if (authenticated_user()) { $authorized = true; } ?>
这个故事的寓意是,你应该从预定义的服务器变量中获取表单数据。所有通过 post 表单传递到你 web 页面的数据都会自动保存到一个称为 $_POST
的大数组中,所有的 GET 数据都保存在 $_GET
大数组中。文件上传信息保存在一个称为 $_FILES
的特殊数据中。另外,还有一个称为 $_REQUEST
的复合变量。
要从一个 POST 方法表单中访问username字段,可以使用 $_POST['username']
。如果 username 在 URL 中就使用$_GET['username']
。如果你不确定值来自哪里,用 $_REQUEST['username']
。
<?php $post_value = $_POST['post_value']; $get_value = $_GET['get_value']; $some_variable = $_REQUEST['some_value']; ?>
$_REQUEST
是 $_GET
、$_POST
、和 $_COOKIE
数组的结合。如果你有两个或多个值有相同的参数名称,注意 PHP 会使用哪个。默认的顺序是 cookie
、POST
、然后是 GET
。
以上就是为大家整理的一些编程安全建议。更过相关问题请访问PHP中文网:https://www.php.cn/
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!