Rumah > Artikel > pembangunan bahagian belakang > Fahami prinsip pembangunan asas PHP: Analisis keselamatan rangkaian dan teknik penyulitan penghantaran data
Fahami prinsip pembangunan asas PHP: analisis keselamatan rangkaian dan teknik penyulitan penghantaran data
Dengan perkembangan pesat Internet, isu keselamatan rangkaian menjadi semakin teruk. Bagi pembangun PHP, adalah sangat penting untuk memahami keselamatan rangkaian dan teknik penyulitan penghantaran data. Artikel ini akan memperkenalkan pengetahuan yang berkaitan dengan keselamatan rangkaian dan penyulitan penghantaran data dalam prinsip pembangunan asas PHP, dan menyediakan beberapa contoh kod untuk rujukan pembaca.
Dari segi keselamatan rangkaian, ancaman biasa termasuk rampasan rangkaian, serangan skrip silang tapak (XSS), pemalsuan permintaan silang tapak (CSRF), dsb. Di bawah ini kami menerangkan cara menangani ancaman ini secara bergilir.
Rampasan rangkaian merujuk kepada penggodam memintas atau mengganggu trafik rangkaian untuk mendapatkan maklumat sensitif pengguna atau melakukan tingkah laku berniat jahat yang lain. Untuk mengelakkan rampasan rangkaian, kami boleh menggunakan protokol HTTPS untuk penghantaran data yang selamat. PHP menyokong penggunaan HTTPS melalui sambungan OpenSSL.
Berikut ialah contoh kod yang menunjukkan cara menggunakan HTTPS untuk pemindahan data selamat:
<?php // 开启HTTPS协议 $options = [ 'ssl' => [ 'verify_peer' => false, // 取消SSL证书验证,方便测试 'verify_peer_name' => false, ], ]; $context = stream_context_create($options); // 发送HTTPS请求 $url = "https://www.example.com/api"; $response = file_get_contents($url, false, $context); // 处理响应 if ($response === false) { echo "请求失败"; } else { echo "响应内容:" . $response; } ?>
Serangan skrip merentas tapak ialah apabila penggodam mencuri pengguna dengan menyuntik skrip berniat jahat ke dalam laman web maklumat sensitif. Untuk mengelakkan serangan XSS, kami boleh menapis input pengguna untuk memastikan ia tidak mengandungi skrip berniat jahat.
Berikut ialah contoh kod yang menunjukkan cara menapis input pengguna:
<?php function filter_input($input) { // 使用htmlspecialchars函数过滤用户输入 return htmlspecialchars($input, ENT_QUOTES, 'UTF-8'); } // 获取用户输入的信息 $username = filter_input($_POST['username']); $password = filter_input($_POST['password']); // 进行其他处理 // ... ?>
Pemalsuan permintaan merentas tapak bermakna penggodam menggunakan status log masuk pengguna untuk melakukan beberapa tindakan dengan memalsukan permintaan Operasi berbahaya. Untuk mengelakkan serangan CSRF, kami boleh menggunakan token CSRF untuk mengesahkan kesahihan permintaan.
Berikut ialah contoh kod yang menunjukkan cara menggunakan token CSRF untuk mengesahkan kesahihan permintaan:
<?php // 生成CSRF令牌 session_start(); if (!isset($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // 验证CSRF令牌 function is_valid_csrf_token($token) { return isset($_SESSION['csrf_token']) && $token === $_SESSION['csrf_token']; } // 验证请求的合法性 function validate_request() { $token = $_POST['csrf_token']; if (!is_valid_csrf_token($token)) { die("请求不合法"); } } // 在表单中插入CSRF令牌 function csrf_token_field() { return '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; } // 使用CSRF令牌验证请求 validate_request(); // 处理其他操作 // ... ?>
Selain keselamatan rangkaian, penyulitan penghantaran data juga merupakan cara penting untuk memastikan keselamatan data. Dua teknologi penyulitan penghantaran data yang biasa digunakan diperkenalkan di bawah.
Penyulitan simetri bermaksud menggunakan kunci yang sama untuk penyulitan dan penyahsulitan. PHP menyediakan fungsi openssl_encrypt dan fungsi openssl_decrypt untuk melaksanakan penyulitan simetri.
Berikut ialah contoh kod yang menunjukkan cara menggunakan penyulitan simetri untuk penghantaran data:
<?php // 加密数据 function encrypt($data, $key) { return openssl_encrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $key); } // 解密数据 function decrypt($data, $key) { return openssl_decrypt($data, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $key); } // 数据加密 $data = "Hello, World!"; $key = "mysecretkey"; $encrypted = encrypt($data, $key); // 数据解密 $decrypted = decrypt($encrypted, $key); echo "加密后的数据:" . $encrypted . "<br>"; echo "解密后的数据:" . $decrypted; ?>
Penyulitan asimetri bermaksud menggunakan kunci awam untuk penyulitan dan kunci peribadi untuk penyahsulitan. PHP menyediakan fungsi openssl_pkey_new dan fungsi openssl_pkey_get_private untuk menjana dan mendapatkan kunci asimetri.
Berikut ialah contoh kod yang menunjukkan cara menggunakan penyulitan asimetri untuk penghantaran data:
<?php // 生成密钥 $config = [ "private_key_bits" => 2048, "private_key_type" => OPENSSL_KEYTYPE_RSA, ]; $private_key = openssl_pkey_new($config); // 获取公钥 $details = openssl_pkey_get_details($private_key); $public_key = $details["key"]; // 使用公钥加密数据 $data = "Hello, World!"; $encrypted = ""; openssl_public_encrypt($data, $encrypted, $public_key); // 使用私钥解密数据 $decrypted = ""; openssl_private_decrypt($encrypted, $decrypted, $private_key); echo "加密后的数据:" . base64_encode($encrypted) . "<br>"; echo "解密后的数据:" . $decrypted; ?>
Artikel ini menyediakan beberapa contoh kod untuk rujukan pembaca dengan memperkenalkan pengetahuan berkaitan keselamatan rangkaian dan penyulitan penghantaran data dalam prinsip pembangunan asas PHP. Diharapkan para pembaca dapat meningkatkan keupayaan pencegahan keselamatan rangkaian pembangunan PHP dan melindungi keselamatan data pengguna dengan mempelajari pengetahuan ini.
Atas ialah kandungan terperinci Fahami prinsip pembangunan asas PHP: Analisis keselamatan rangkaian dan teknik penyulitan penghantaran data. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!