国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Table des matières
Cryptage" >Cryptage
Maison développement back-end tutoriel php Cryptage de sécurité PHP

Cryptage de sécurité PHP

Feb 20, 2017 am 09:04 AM
Sécurité PHP cryptage



Cryptage

En tant que livre sur la sécurité, le chiffrement est généralement un sujet qui doit être mentionné. La raison pour laquelle j’ignore le chiffrement dans la partie principale de ce livre est que son utilisation est restreinte et que les développeurs devraient penser à la sécurité dans une perspective plus large. Une dépendance excessive au chiffrement obscurcit souvent la source du problème. Bien que le chiffrement lui-même soit efficace, il ne rend pas comme par magie une application plus sécurisée.

Un développeur PHP doit principalement être familier avec les méthodes de chiffrement suivantes :

l Cryptage symétrique

l Cryptage asymétrique (clé publique)

l Fonction de hachage (résumé des informations)

l Code de vérification des informations

Cette annexe se concentre principalement sur l'algorithme de chiffrement symétrique utilisant l'extension mcrypt. Les informations auxquelles vous devez vous référer sont les suivantes :

Cryptographie appliquée, par Bruce Schneier (Wiley)

http://m.miracleart.cn/

http://m.miracleart.cn/

http://m.miracleart.cn/

http://m.miracleart.cn/

http://m.miracleart.cn/

C.1. Stockage du mot de passe

Lorsque vous stockez des mots de passe dans une base de données, ne les stockez jamais en clair. Stockez plut?t le hachage du mot de passe et utilisez la cha?ne ajoutée?:

<?php
 
  /* $password contains the password. */
 
  $salt = &#39;SHIFLETT&#39;;
  $password_hash = md5($salt . md5($password .
$salt));
 
  /* Store password hash. */
 
  ?>
.


Lorsque vous devez confirmer si un mot de passe est correct, utilisez la même méthode Calculez le valeur de hachage et comparer les similitudes et les différences?:

  <?php
 
  $salt = &#39;SHIFLETT&#39;;
  $password_hash = md5($salt .
md5($_POST[&#39;password&#39;] . $salt));
 
  /* Compare password hashes. */
 
  ?>


Si les valeurs de hachage sont exactement les mêmes, vous avez des raisons de penser que les mots de passe sont également les mêmes.

Si cette astuce est utilisée, il est impossible de dire à l'utilisateur quel est son mot de passe. Lorsqu'un utilisateur oublie son mot de passe, vous pouvez uniquement lui demander de saisir un nouveau mot de passe, de recalculer la valeur de hachage et de la stocker dans la base de données. Bien entendu, vous devez être très prudent lors de l’authentification des utilisateurs : les rappels de mots de passe sont une cible fréquente d’attaques et une source fréquente de failles de sécurité.

C.2. Utiliser mcrypt

L'extension de chiffrement standard de PHP est mcrypt, qui prend en charge de nombreux algorithmes de chiffrement différents. Vous pouvez transmettre mcrypt_list_algorithms( ) pour voir la liste des algorithmes pris en charge sur votre plateforme?:

 <?php
 
  echo &#39;<pre class="brush:php;toolbar:false">&#39; .
print_r(mcrypt_list_algorithms(), TRUE) . &#39;
'; ?>


Le cryptage et le déchiffrement sont respectivement gérés par mcrypt_encrypt() et mcrypt_decrypt( ) fonction à implémenter. Les deux fonctions ont 5 paramètres. Le premier paramètre permet de préciser l'algorithme utilisé?:

 <?php
 
  mcrypt_encrypt($algorithm,
                 $key,
                 $cleartext,
                 $mode,
                 $iv);
 
  mcrypt_decrypt($algorithm,
                 $key,
                 $ciphertext,
                 $mode,
                 $iv);
 
  ?>


.

La clé de cryptage (le deuxième paramètre) est une donnée très sensible, vous voulez donc vous assurer de la stocker dans un endroit s?r. Les clés de chiffrement peuvent être protégées à l'aide des méthodes de protection des autorisations de base de données décrites au chapitre 8. Si les conditions financières le permettent, les clés de chiffrement matérielles constituent le meilleur choix, car elles offrent une sécurité extrêmement renforcée.

La fonction propose plusieurs modes, vous pouvez utiliser mcrypt_list_modes( ) pour lister tous les modes pris en charge?:

<?php
 
  echo &#39;<pre class="brush:php;toolbar:false">&#39; . print_r(mcrypt_list_modes(),
TRUE) . &#39;
'; ?>


Le le cinquième paramètre ($iv) est le vecteur d'initialisation, qui peut être créé à l'aide de la fonction mcrypt_create_iv().

L'exemple de classe suivant fournit des méthodes de chiffrement et de déchiffrement de base?:

  class crypt
  {
    private $algorithm;
    private $mode;
    private $random_source;
 
    public $cleartext;
    public $ciphertext;
    public $iv;
 
    public function __construct($algorithm =
MCRYPT_BLOWFISH,
                                $mode =
MCRYPT_MODE_CBC,
                                $random_source =
MCRYPT_DEV_URANDOM)
    {
      $this->algorithm = $algorithm;
      $this->mode = $mode;
      $this->random_source = $random_source;
    }
 
    public function generate_iv()
    {
      $this->iv =
mcrypt_create_iv(mcrypt_get_iv_size($this->algorithm,
        $this->mode),
$this->random_source);
    }
 
    public function encrypt()
    {
      $this->ciphertext =
mcrypt_encrypt($this->algorithm,
        $_SERVER[&#39;CRYPT_KEY&#39;], $this->cleartext,
$this->mode, $this->iv);
    }
 
    public function decrypt()
    {
      $this->cleartext =
mcrypt_decrypt($this->algorithm,
        $_SERVER[&#39;CRYPT_KEY&#39;], $this->ciphertext,
$this->mode, $this->iv);
    }
  }
 
  ?>


上面的類(lèi)會(huì)在其它示例中使用,下面是它的使用方法示例:

<?php
 
  $crypt = new crypt();
 
  $crypt->cleartext = &#39;This is a string&#39;;
  $crypt->generate_iv();
  $crypt->encrypt();
 
  $ciphertext =
base64_encode($crypt->ciphertext);
  $iv = base64_encode($crypt->iv);
 
  unset($crypt);
 
  /* Store $ciphertext and $iv (initialization
vector). */
 
  $ciphertext = base64_decode($ciphertext);
  $iv = base64_decode($iv);
 
  $crypt = new crypt();
 
  $crypt->iv = $iv;
  $crypt->ciphertext = $ciphertext;
  $crypt->decrypt();
 
  $cleartext = $crypt->cleartext;
 
  ?>


小提示

本擴(kuò)展要求你在編譯PHP時(shí)使用-mcrypt標(biāo)識(shí)。安裝指南及要求詳見(jiàn)http://m.miracleart.cn/。

C.3. 信用卡號(hào)的保存

我常常被問(wèn)到如何安全地保存信用卡號(hào)。我的總是會(huì)首先詢(xún)問(wèn)他們是否確實(shí)有必要保存信用卡號(hào)。畢竟不管具體是如何操作的,引入不必要的風(fēng)險(xiǎn)是不明智的。同時(shí)國(guó)家法律還有關(guān)于信用卡信息處理方面的規(guī)定,我還時(shí)刻小心地提醒我并不是一個(gè)法律專(zhuān)家。

本書(shū)中我并不會(huì)專(zhuān)門(mén)討論信用卡處理的方法,而是會(huì)說(shuō)明如何保存加密信息到數(shù)據(jù)庫(kù)及在讀取時(shí)解密。該流程會(huì)導(dǎo)致系統(tǒng)性能的下降,但是確實(shí)提供了一層保護(hù)措施。其主要優(yōu)點(diǎn)是如果數(shù)據(jù)庫(kù)內(nèi)容泄密暴露出的只是加密信息,但是前提是加密鍵是安全的。因此,加密鍵與加密的實(shí)現(xiàn)方法本身同樣重要。

保存加密數(shù)據(jù)到數(shù)據(jù)的過(guò)程是,首先加密數(shù)據(jù),然后通過(guò)初始向量與明文建立密文來(lái)保存到數(shù)據(jù)庫(kù)。由于密文是二進(jìn)制字符串,還需要通過(guò)base64_encode( )轉(zhuǎn)換成普通文本字符串以保證二進(jìn)制編碼的安全存儲(chǔ)。

<?php
 
  $crypt = new crypt();
 
  $crypt->cleartext = &#39;1234567890123456&#39;;
  $crypt->generate_iv();
  $crypt->encrypt();
 
  $ciphertext = $crypt->ciphertext;
  $iv = $crypt->iv;
 
  $string = base64_encode($iv . $ciphertext);
 
  ?>


保存該字串至數(shù)據(jù)庫(kù)。在讀取時(shí),則是上面流程的逆處理:

  <?php
 
  $string = base64_decode($string);
 
  $iv_size = mcrypt_get_iv_size($algorithm,
$mode);
 
  $ciphertext = substr($string, $iv_size);
  $iv = substr($string, 0, $iv_size);
 
  $crypt = new crypt();
 
  $crypt->iv = $iv;
  $crypt->ciphertext = $ciphertext;
  $crypt->decrypt();
 
  $cleartext =  $crypt->cleartext;
 
  ?>


本實(shí)現(xiàn)方法假定加密算法與模式不變。如果它們是不定的話(huà),你還要保存它們以用于解密數(shù)據(jù)。加密鍵是唯一需要保密的數(shù)據(jù)。

C.4. 加密會(huì)話(huà)數(shù)據(jù)

如果你的數(shù)據(jù)庫(kù)存在安全問(wèn)題,或者部分保存在會(huì)話(huà)中的數(shù)據(jù)是敏感的,你可能希望加密會(huì)話(huà)數(shù)據(jù)。除非很有必要,一般我不推薦這樣做,但是如果你覺(jué)得在你的情形下需要這樣做的話(huà),本節(jié)提供了一個(gè)實(shí)現(xiàn)方法的示例。

這個(gè)方案十分簡(jiǎn)單。實(shí)際上,在第八章中,已經(jīng)說(shuō)明了如何通過(guò)調(diào)用session_set_save_handler( )來(lái)執(zhí)行你自己的會(huì)話(huà)機(jī)制。通過(guò)對(duì)保存和讀取數(shù)據(jù)的函數(shù)的少量調(diào)整,你就能加密存入數(shù)據(jù)庫(kù)的數(shù)據(jù)及在讀取時(shí)解密數(shù)據(jù):

 <?php
 
  function _read($id)
  {
    global $_sess_db;
 
    $algorithm = MCRYPT_BLOWFISH;
    $mode = MCRYPT_MODE_CBC;
 
    $id = mysql_real_escape_string($id);
 
    $sql = "SELECT data
            FROM   sessions
            WHERE  id = &#39;$id&#39;";
 
    if ($result = mysql_query($sql, $_sess_db))
    {
        $record = mysql_fetch_assoc($result);
 
        $data = base64_decode($record[&#39;data&#39;]);
 
        $iv_size = mcrypt_get_iv_size($algorithm,
$mode);
 
        $ciphertext = substr($data, $iv_size);
        $iv = substr($data, 0, $iv_size);
 
        $crypt = new crypt();
 
        $crypt->iv = $iv;
        $crypt->ciphertext = $ciphertext;
        $crypt->decrypt();
 
        return $crypt->cleartext;
    }
 
    return &#39;&#39;;
  }
 
  function _write($id, $data)
  {
    global $_sess_db;
 
    $access = time();
 
    $crypt = new crypt();
 
    $crypt->cleartext = $data;
    $crypt->generate_iv();
    $crypt->encrypt();
 
    $ciphertext = $crypt->ciphertext;
    $iv = $crypt->iv;
 
    $data = base64_encode($iv . $ciphertext);
 
    $id = mysql_real_escape_string($id);
    $access = mysql_real_escape_string($access);
    $data = mysql_real_escape_string($data);
 
    $sql = "REPLACE
            INTO    sessions
            VALUES  (&#39;$id&#39;, &#39;$access&#39;,
&#39;$data&#39;)";
 
    return mysql_query($sql, $_sess_db);
  }

?以上就是PHP安全-加密的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(m.miracleart.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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Comment fonctionne le détournement de session et comment pouvez-vous l'atténuer en PHP? Apr 06, 2025 am 12:02 AM

Le détournement de la session peut être réalisé via les étapes suivantes: 1. Obtenez l'ID de session, 2. Utilisez l'ID de session, 3. Gardez la session active. Les méthodes pour empêcher le détournement de la session en PHP incluent: 1. Utilisez la fonction Session_RegeReate_id () pour régénérer l'ID de session, 2. Stocker les données de session via la base de données, 3. Assurez-vous que toutes les données de session sont transmises via HTTPS.

Comment chiffrer le package compressé dans la méthode de package compressé chiffré winrar-winrar Comment chiffrer le package compressé dans la méthode de package compressé chiffré winrar-winrar Mar 23, 2024 pm 12:10 PM

L'éditeur vous présentera trois méthodes de cryptage et de compression : Méthode 1 : cryptage La méthode de cryptage la plus simple consiste à saisir le mot de passe que vous souhaitez définir lors du cryptage du fichier, et le cryptage et la compression sont terminés. Méthode 2 : Cryptage automatique La méthode de cryptage ordinaire nous oblige à saisir un mot de passe lors du cryptage de chaque fichier. Si vous souhaitez crypter un grand nombre de packages compressés et que les mots de passe sont les mêmes, nous pouvons définir le cryptage automatique dans WinRAR, puis juste quand. En compressant les fichiers normalement, WinRAR ajoutera un mot de passe à chaque package compressé. La méthode est la suivante?: ouvrez WinRAR, cliquez sur Options-Paramètres dans l'interface de configuration, passez à [Compression], cliquez sur Créer un mot de passe de configuration par défaut. Entrez le mot de passe que nous voulons définir ici, cliquez sur OK pour terminer le réglage, nous n'avons besoin que de corriger

Vulnérabilités de sécurité et solutions dans le développement PHP Vulnérabilités de sécurité et solutions dans le développement PHP May 09, 2024 pm 03:33 PM

Vulnérabilités de sécurité et solutions dans le développement PHP Introduction PHP est un langage de script c?té serveur populaire largement utilisé dans le développement Web. Cependant, comme tout logiciel, PHP présente certaines failles de sécurité. Cet article explorera les vulnérabilités de sécurité PHP courantes et leurs solutions. Vulnérabilité de sécurité PHP courante Injection SQL : permet à un attaquant d'accéder ou de modifier les données de la base de données en saisissant du code SQL malveillant dans un formulaire Web ou une URL. Cross-site scripting (XSS) : permet à un attaquant d'exécuter du code de script malveillant dans le navigateur de l'utilisateur. Le fichier contient?: permet à un attaquant de charger et d'exécuter des fichiers distants ou des fichiers sensibles sur le serveur. Exécution de code à distance (RCE)?: permet aux attaquants d'exécuter des

Comment empêchez-vous l'injection SQL en PHP? (Déclarations préparées, APD) Comment empêchez-vous l'injection SQL en PHP? (Déclarations préparées, APD) Apr 15, 2025 am 12:15 AM

L'utilisation de déclarations de prétraitement et l'APD dans PHP peut effectivement empêcher les attaques d'injection SQL. 1) Utilisez PDO pour vous connecter à la base de données et définir le mode d'erreur. 2) Créez des instructions de prétraitement via la méthode de préparation et transmettez des données à l'aide des espaces réservés et exécutez des méthodes. 3) Traitez les résultats de la requête et assurez la sécurité et les performances du code.

Comment configurer le cryptage de l'album photo sur un téléphone mobile Apple Comment configurer le cryptage de l'album photo sur un téléphone mobile Apple Mar 02, 2024 pm 05:31 PM

Sur les téléphones mobiles Apple, les utilisateurs peuvent crypter les albums photos selon leurs propres besoins. Certains utilisateurs ne savent pas comment le configurer. Vous pouvez ajouter les images qui doivent être cryptées au mémo, puis verrouiller le mémo. Ensuite, l'éditeur présentera la méthode de configuration du cryptage des albums photo mobiles pour les utilisateurs intéressés, venez jeter un ?il ! Tutoriel sur les téléphones mobiles Apple Comment configurer le cryptage de l'album photo iPhone A : Après avoir ajouté les images qui doivent être cryptées au mémo, allez verrouiller le mémo pour une introduction détaillée : 1. Entrez dans l'album photo, sélectionnez l'image qui doit être cryptée. crypté, puis cliquez sur [Ajouter à] ci-dessous. 2. Sélectionnez [Ajouter aux notes]. 3. Saisissez le mémo, recherchez le mémo que vous venez de créer, saisissez-le et cliquez sur l'ic?ne [Envoyer] dans le coin supérieur droit. 4. Cliquez sur [Verrouiller l'appareil] ci-dessous

Expliquez les scripts croisés (XSS) et comment l'empêcher dans PHP (HTMLSpecialChars). Expliquez les scripts croisés (XSS) et comment l'empêcher dans PHP (HTMLSpecialChars). Apr 08, 2025 am 12:04 AM

XSS est une attaque qui est exécutée dans le navigateur de l'utilisateur en injectant des scripts malveillants. L'utilisation de la fonction HTMLSpecialCars en PHP peut effectivement empêcher les attaques XSS: 1) HTMLSpecialChars convertit des caractères spéciaux en entités HTML pour empêcher les navigateurs de les interpréter comme du code; 2) Lorsque vous utilisez dans les attributs HTML, les guillemets doivent être échappés à l'aide du drapeau ent_quotes; 3) La combinaison d'autres mesures de sécurité, telles que la vérification des entrées et le codage de sortie, une protection à plusieurs niveaux est formée.

Laquelle des dix principales applications de trading de devises virtuelles est la meilleure? Laquelle des dix principales applications de trading de devises virtuelles est la meilleure? Mar 19, 2025 pm 05:00 PM

Top 10 des classements de trading de devises virtuels: 1. Okx, 2. Binance, 3. Gate.io, 4. Kraken, 5. Huobi, 6. Coinbase, 7. Kucoin, 8. Crypto.com, 9. BitFinex, 10. Gemini. La sécurité, la liquidité, les frais de traitement, la sélection des devises, l'interface utilisateur et le support client doivent être pris en compte lors du choix d'une plate-forme.

Obtenez le package d'installation Gate.io gratuitement Obtenez le package d'installation Gate.io gratuitement Feb 21, 2025 pm 08:21 PM

Gate.io est un échange de crypto-monnaie populaire que les utilisateurs peuvent utiliser en téléchargeant son package d'installation et en l'installant sur leurs appareils. Les étapes pour obtenir le package d'installation sont les suivantes: Visitez le site officiel de Gate.io, cliquez sur "Télécharger", sélectionnez le système d'exploitation correspondant (Windows, Mac ou Linux) et téléchargez le package d'installation sur votre ordinateur. Il est recommandé de désactiver temporairement les logiciels antivirus ou le pare-feu pendant l'installation pour assurer une installation fluide. Une fois terminé, l'utilisateur doit créer un compte Gate.io pour commencer à l'utiliser.

See all articles