Formulaires et données de sécurité PHP

黄舟
Libérer: 2023-03-05 22:16:01
original
1433 Les gens l'ont consulté



Formulaire et données

Dans le développement d'applications PHP typique, la plupart des logiques impliquent des tâches de traitement de données, telles que la confirmation si l'utilisateur s'est connecté avec succès, l'ajout d'articles au panier et le traitement des transactions par carte de crédit.

Les données peuvent provenir d'innombrables sources. En tant que développeur soucieux de la sécurité, vous devez distinguer de manière simple et fiable deux types de données :

l Données filtrées

l Données contaminées

Toutes les données fiables que vous définissez vous-même peuvent être considérées comme des données filtrées. Une donnée que vous définissez vous-même est toute donnée codée en dur, telle que les données d'adresse e-mail suivantes :

  $email = 'chris@example.org';
Copier après la connexion


L'adresse e-mail chris@example.org ci-dessus ne provient d'aucune source de données distante. C'est évidemment crédible. Toutes les données provenant d'une source de données distante sont entrées, et toutes les données d'entrée sont entachées et doivent être filtrées avant utilisation.

Les données contaminées font référence à toutes les données dont la légalité ne peut pas être garantie, telles que les formulaires soumis par les utilisateurs, les e-mails reçus des serveurs de messagerie et les documents XML envoyés depuis d'autres applications Web. Dans l'exemple précédent, $email est une variable contenant des données filtrées. Les données sont la clé, pas les variables. Les variables ne sont que des conteneurs de données, qui sont souvent écrasées par des données contaminées lors de l'exécution du programme :

  $email = $_POST['email'];
Copier après la connexion


De bien sûr, c'est pourquoi $email est appelé une variable. Si vous ne souhaitez pas que les données changent, vous pouvez utiliser des constantes à la place :

CODE :

define('EMAIL', 'chris@example.org');
Copier après la connexion

S'il est défini avec l'instruction ci-dessus, EMAIL est une constante inchangée avec la valeur chris@example.org tout au long du script et ne changera pas même si vous essayez de le réaffecter (généralement accidentellement). Par exemple, le code suivant génère chris@example.org (Tenter de redéfinir une constante provoquera un message d'erreur avec un niveau d'avis).

CODE :

Copier après la connexion


Conseils

Pour plus d'informations sur les constantes, veuillez visiter http://www.php . cn/

Comme indiqué au chapitre 1, register_globals peut rendre difficile la détermination de l'origine d'une variable telle que $email. Toutes les données provenant de sources externes doivent être considérées comme contaminées jusqu'à ce qu'elles soient prouvées légitimes.

Bien qu'un utilisateur puisse envoyer des données de différentes manières, la plupart des applications effectuent les opérations les plus importantes en fonction des résultats de la soumission du formulaire. Un autre attaquant peut compromettre simplement en manipulant les données soumises (la base sur laquelle votre application fonctionne), et le formulaire ouvre facilement la conception de votre application et les données que vous devez utiliser. C'est pourquoi la gestion des formulaires est la première préoccupation parmi tous les problèmes de sécurité des applications Web.

Un utilisateur peut transférer des données vers votre application de trois manières :

l Via l'URL (telle que la méthode de données GET)

l Via le contenu d'une requête (telle que la méthode de données POST)

l Via HTTP informations d'en-tête (telles que les cookies)

Étant donné que les informations d’en-tête HTTP ne sont pas directement liées au traitement du formulaire, elles ne seront pas abordées dans ce chapitre. En général, la suspicion des données GET et POST peut être étendue à toutes les entrées, y compris les en-têtes HTTP.

表单通过GET或POST请求方式传送数据。当你建立了一个HTML表单,你需要在form标签的method属性中指定请求方式:

  <form action="http://example.org/register.php"
method="GET">
Copier après la connexion


在前例中,请求方式被指定为GET,浏览器将通过URL的请求串部分传输数据,例如,考虑下面的表单:

CODE:

<form action="http://example.org/login.php"
method="GET">
  <p>Username: <input type="text"
name="username" /></p>
  <p>Password: <input type="password"
name="password" /></p>
  <p><input type="submit" /></p>
  </form>
Copier après la connexion


如果我输入了用户名chris和密码mypass,在表单提交后,我会到达URL为http://www.php.cn/的页面。该URL最简单的合法HTTP/1.1请求信息如下:

CODE:

 GET /login.php?username=chris&password=mypass
HTTP/1.1
  Host: example.org
Copier après la connexion


并不是必须要使用HTML表单来请求这个URL,实际上通过HTML表单的GET请求方式发送数据与用户直接点击链接并没有什么不同。

记住如果你在GET方式提交的表单中的action中试图使用请求串,它会被表单中的数据所取代。

而且,如果你指定了一个非法的请求方式,或者请求方式属性未写,浏览器则会默认以GET方式提交数据。

为说明POST请求方式,只对上例进行简单的更改,考虑把GET请求方式更改为POST的情况:

CODE:

<form action="http://example.org/login.php"
method="POST">
  <p>Username: <input type="text"
name="username" /></p>
  <p>Password: <input type="password"
name="password" /></p>
  <p><input type="submit" /></p>
  </form>
Copier après la connexion


如果我再次指定用户名chris和密码mypass,在提交表单后,我会来到http://www.php.cn/页面。表单数据在请求的内部而不是一个URL的请求串。该方式最简单的合法HTTP/1.1请求信息如下

CODE:

POST /login.php HTTP/1.1
  Host: example.org
  Content-Type: application/x-www-form-urlencoded
  Content-Length: 30
 
  username=chris&password=mypass
Copier après la connexion


 

      现在你已看到用户向你的应用提供数据的主要方式。在下面的小节中,我们将会讨论攻击者是如何利用你的表单和URL作为进入你的应用的缺口的。

以上就是PHP安全-表单与数据的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal