PHP-Sicherheitsverschlüsselungstechnologie
Ein PHP-Entwickler sollte vor allem mit den folgenden Verschlüsselungsmethoden vertraut sein:
l Symmetrische Verschlüsselung
l Asymmetrische Verschlüsselung (öffentlicher Schlüssel)
l Hash-Funktion (Informationszusammenfassung)
l Informationsüberprüfungscode
Dieser Anhang konzentriert sich hauptsächlich auf den symmetrischen Verschlüsselungsalgorithmus unter Verwendung der mcrypt-Erweiterung. Die Informationen, auf die Sie sich beziehen müssen, lauten wie folgt:
Applied Cryptography, von Bruce Schneier (Wiley)
http://www.schneier.com/blog /
http://wikipedia.org/wiki/Cryptography
http://phpsec.org/articles/2005/password-hashing.html
http:/ / pear.php.net/package/Crypt_HMAC
http://pear.php.net/package/Crypt_RSA
C.1. Passwortspeicherung
Wenn Sie Passwörter in einer Datenbank speichern, speichern Sie sie niemals im Klartext. Speichern Sie stattdessen den Hashwert des Passworts und verwenden Sie gleichzeitig zusätzliche Zeichenfolgen:
<?php /* $password contains the password. */ $salt = 'SHIFLETT'; $password_hash = md5($salt . md5($password . $salt)); /* Store password hash. */ ?>
Wenn Sie bestätigen müssen, ob ein Passwort korrekt ist, berechnen Sie den Hash-Wert auf die gleiche Weise und vergleichen Sie die Ähnlichkeiten und Unterschiede:
<?php $salt = 'SHIFLETT'; $password_hash = md5($salt . md5($_POST['password'] . $salt)); /* Compare password hashes. */ ?>
Wenn der Hash Wenn die Werte genau gleich sind, haben Sie Grund zu der Annahme, dass auch das Passwort dasselbe ist.
Wenn dieser Trick angewendet wird, ist es unmöglich, dem Benutzer sein Passwort mitzuteilen. Wenn ein Benutzer sein Passwort vergisst, können Sie ihn nur bitten, ein neues Passwort einzugeben und den Hash-Wert neu zu berechnen und in der Datenbank zu speichern. Natürlich müssen Sie bei der Authentifizierung von Benutzern sehr vorsichtig sein – Passwort-Erinnerungen sind ein häufiges Ziel von Angriffen und eine häufige Quelle von Sicherheitsverletzungen.
C.2. Verwendung von mcrypt
Die Standard-Verschlüsselungserweiterung von PHP ist mcrypt, die viele verschiedene Verschlüsselungsalgorithmen unterstützt. Sie können die Liste der auf Ihrer Plattform unterstützten Algorithmen über die Funktion mcrypt_list_algorithms() anzeigen:
<?php echo '<pre class="brush:php;toolbar:false">' . print_r(mcrypt_list_algorithms(), TRUE) . ''; ?>
Ver- und Entschlüsselung werden durch mcrypt_encrypt() und mcrypt_decrypt() durchgeführt. Funktionen bzw. erfüllen. Beide Funktionen verfügen über 5 Parameter. Der erste Parameter wird verwendet, um den verwendeten Algorithmus anzugeben:
<?php mcrypt_encrypt($algorithm, $key, $cleartext, $mode, $iv); mcrypt_decrypt($algorithm, $key, $ciphertext, $mode, $iv); ?>
Der Verschlüsselungsschlüssel (der zweite Parameter) ist eine sehr sensible Datenquelle, die Sie erstellen möchten Stellen Sie sicher, dass Sie es an einem sicheren Ort aufbewahren. Verschlüsselungsschlüssel können mit den Methoden zum Schutz von Datenbankberechtigungen in Kapitel 8 geschützt werden. Wenn die finanziellen Bedingungen es zulassen, sind Hardware-Verschlüsselungsschlüssel die beste Wahl, da sie äußerst hohe Sicherheit bieten.
Die Funktion verfügt über mehrere Modi zur Auswahl. Sie können mcrypt_list_modes() verwenden, um alle unterstützten Modi aufzulisten:
<?php echo '<pre class="brush:php;toolbar:false">' . print_r(mcrypt_list_modes(), TRUE) . ''; ?>
Der fünfte Parameter ($ iv) ist der Initialisierungsvektor, der mit der Funktion mcrypt_create_iv() erstellt werden kann.
Die folgende Beispielklasse stellt grundlegende Verschlüsselungs- und Entschlüsselungsmethoden bereit:
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['CRYPT_KEY'], $this->cleartext, $this->mode, $this->iv); } public function decrypt() { $this->cleartext = mcrypt_decrypt($this->algorithm, $_SERVER['CRYPT_KEY'], $this->ciphertext, $this->mode, $this->iv); } } ?>
Die obige Klasse wird in anderen Beispielen verwendet. Das Folgende ist ein Beispiel für ihre Verwendung :
<?php $crypt = new crypt(); $crypt->cleartext = 'This is a string'; $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; ?>
Tipps
Diese Erweiterung erfordert die Verwendung des Flags -mcrypt beim Kompilieren von PHP. Installationsanweisungen und Anforderungen finden Sie unter http://php.net/mcrypt.
C.3. Speicherung von Kreditkartennummern
Ich werde oft gefragt, wie ich Kreditkartennummern sicher speichern kann. Meiner beginnt immer mit der Frage, ob die Kreditkartennummer wirklich gespeichert werden muss. Denn egal wie man es macht, es ist unklug, unnötige Risiken einzugehen. Gleichzeitig gibt es in den nationalen Gesetzen auch Regelungen zur Verarbeitung von Kreditkarteninformationen. Ich erinnere mich immer daran, dass ich kein Rechtsexperte bin.
In diesem Buch werde ich nicht speziell auf Kreditkartenverarbeitungsmethoden eingehen, sondern erklären, wie verschlüsselte Informationen in der Datenbank gespeichert und beim Lesen entschlüsselt werden. Dieser Prozess führt zu einer Verschlechterung der Systemleistung, bietet jedoch eine Schutzschicht. Der Hauptvorteil besteht darin, dass im Falle eines Lecks des Datenbankinhalts nur die verschlüsselten Informationen offengelegt werden. Voraussetzung ist jedoch, dass der Verschlüsselungsschlüssel sicher ist. Daher ist der Verschlüsselungsschlüssel genauso wichtig wie die Implementierung der Verschlüsselung selbst.
Der Prozess des Speicherns verschlüsselter Daten in Daten besteht darin, zunächst die Daten zu verschlüsseln, dann Chiffretext über den ursprünglichen Vektor und Klartext zu erstellen und ihn in der Datenbank zu speichern. Da es sich bei dem Chiffretext um eine Binärzeichenfolge handelt, muss er über base64_encode() in eine normale Textzeichenfolge konvertiert werden, um eine sichere Speicherung der Binärcodierung zu gewährleisten.
<?php $crypt = new crypt(); $crypt->cleartext = '1234567890123456'; $crypt->generate_iv(); $crypt->encrypt(); $ciphertext = $crypt->ciphertext; $iv = $crypt->iv; $string = base64_encode($iv . $ciphertext); ?>
Speichern Sie die Zeichenfolge in der Datenbank. Beim Lesen handelt es sich um die umgekehrte Verarbeitung des obigen Prozesses:
<?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; ?>
Bei dieser Implementierungsmethode wird davon ausgegangen, dass der Verschlüsselungsalgorithmus und -modus unverändert bleiben. Wenn sie nicht definiert sind, müssen Sie sie auch speichern, um sie beim Entschlüsseln der Daten verwenden zu können. Der Verschlüsselungsschlüssel ist die einzige Information, die geheim gehalten werden muss.
C.4. Sitzungsdaten verschlüsseln
如果你的数据库存在安全问题,或者部分保存在会话中的数据是敏感的,你可能希望加密会话数据。除非很有必要,一般我不推荐这样做,但是如果你觉得在你的情形下需要这样做的话,本节提供了一个实现方法的示例。
这个方案十分简单。实际上,在第八章中,已经说明了如何通过调用session_set_save_handler( )来执行你自己的会话机制。通过对保存和读取数据的函数的少量调整,你就能加密存入数据库的数据及在读取时解密数据:
<?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 = '$id'"; if ($result = mysql_query($sql, $_sess_db)) { $record = mysql_fetch_assoc($result); $data = base64_decode($record['data']); $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 ''; } 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 ('$id', '$access', '$data')"; return mysql_query($sql, $_sess_db); } ?>

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



PHP 8.4 bringt mehrere neue Funktionen, Sicherheitsverbesserungen und Leistungsverbesserungen mit einer beträchtlichen Menge an veralteten und entfernten Funktionen. In dieser Anleitung wird erklärt, wie Sie PHP 8.4 installieren oder auf PHP 8.4 auf Ubuntu, Debian oder deren Derivaten aktualisieren. Obwohl es möglich ist, PHP aus dem Quellcode zu kompilieren, ist die Installation aus einem APT-Repository wie unten erläutert oft schneller und sicherer, da diese Repositorys in Zukunft die neuesten Fehlerbehebungen und Sicherheitsupdates bereitstellen.

Um in cakephp4 mit Datum und Uhrzeit zu arbeiten, verwenden wir die verfügbare FrozenTime-Klasse.

CakePHP ist ein Open-Source-Framework für PHP. Es soll die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich vereinfachen. CakePHP basiert auf einer MVC-ähnlichen Architektur, die sowohl leistungsstark als auch leicht zu verstehen ist. Modelle, Ansichten und Controller gu

Um am Datei-Upload zu arbeiten, verwenden wir den Formular-Helfer. Hier ist ein Beispiel für den Datei-Upload.

Der Validator kann durch Hinzufügen der folgenden zwei Zeilen im Controller erstellt werden.

Visual Studio Code, auch bekannt als VS Code, ist ein kostenloser Quellcode-Editor – oder eine integrierte Entwicklungsumgebung (IDE) –, die für alle gängigen Betriebssysteme verfügbar ist. Mit einer großen Sammlung von Erweiterungen für viele Programmiersprachen kann VS Code c

CakePHP ist ein Open-Source-MVC-Framework. Es erleichtert die Entwicklung, Bereitstellung und Wartung von Anwendungen erheblich. CakePHP verfügt über eine Reihe von Bibliotheken, um die Überlastung der häufigsten Aufgaben zu reduzieren.

Dieses Tutorial zeigt, wie XML -Dokumente mit PHP effizient verarbeitet werden. XML (Extensible Markup-Sprache) ist eine vielseitige textbasierte Markup-Sprache, die sowohl für die Lesbarkeit des Menschen als auch für die Analyse von Maschinen entwickelt wurde. Es wird üblicherweise für die Datenspeicherung ein verwendet und wird häufig verwendet
