インターネット技術の継続的な発展により、Web フォームは Web サイトに不可欠な機能の 1 つになりました。登録、ログイン、コメント、購読のいずれの場合でも、ユーザーはこれらの機能をフォームに記入する必要があります。ただし、これは Web フォームがさまざまなセキュリティの脅威にさらされていることも意味します。これらの脅威に対応して、この記事では、Web アプリケーションの保護に役立つ PHP フォーム保護テクニックをいくつか紹介します。
クロスサイト スクリプティング攻撃は、Web セキュリティの一般的な脅威です。攻撃者は、悪意のあるコードの情報を挿入することでユーザーの機密性を高めます。 XSS 攻撃を防ぐために、PHP 組み込み関数 htmlspecialchars() を使用してユーザーが入力したデータをエンコードできます。例:
<?php $name = $_POST['name']; echo 'Hello, ' . htmlspecialchars($name); ?>
上記のコードでは、htmlspecialchars() はすべての特殊文字 (<、>、&、" など) を対応する HTML エンティティに変換し、XSS 攻撃を防ぎます。
<?php $name = $_POST['name']; if(strlen($name) > 20) { echo '用户名太长'; } else if(preg_match('/[^a-z0-9]/i', $name)) { echo '用户名包含非法字符'; } else { // 用户名合法,继续执行其他操作 } ?>
<?php session_start(); if($_POST) { if(strtolower($_POST['captcha']) == strtolower($_SESSION['captcha'])) { // 验证码输入正确,继续执行其他操作 } else { echo '验证码输入错误'; } } $captcha = rand(1000, 9999); $_SESSION['captcha'] = $captcha; $img = imagecreate(50, 20); $bg = imagecolorallocate($img, 255, 255, 255); $fg = imagecolorallocate($img, 0, 0, 0); imagestring($img, 5, 10, 3, $captcha, $fg); header('Content-type: image/png'); imagepng($img); imagedestroy($img); ?>
<?php $stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email'); $stmt->execute(array('email' => $_POST['email'])); $user = $stmt->fetch(); ?>
<?php if($_FILES) { $ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION); $tmp_file = $_FILES['file']['tmp_name']; if(class_exists('ClamAV')) { $clamav = new ClamAV(); $result = $clamav->scan($tmp_file); if(!$result) { echo '文件上传失败:包含恶意代码'; } else { $filename = uniqid('file_') . '.' . $ext; move_uploaded_file($tmp_file, dirname(__FILE__) . '/uploads/' . $filename); echo '文件上传成功'; } } else { // 若未找到Antivirus API,则提供默认处理方式 $filename = uniqid('file_') . '.' . $ext; move_uploaded_file($tmp_file, dirname(__FILE__) . '/uploads/' . $filename); echo '文件上传成功'; } } ?>
以上がPHP フォーム保護のヒント: 保護バックエンド スクリプトを使用するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。