PHP人機驗證,顧名思義,就是在網站上進行驗證的過程中,要去判斷訪問者是否是人類。其主要目的就是為了防止機器人和黑客利用自動化腳本攻擊網站,保障網站的安全穩定。這種驗證常見于用戶登錄、表單提交、驗證碼等多種場景中。
在進行PHP人機驗證時,我們需要了解幾種常見的驗證方法。其中一個非常常見的方法就是圖形驗證碼。這種驗證碼需要用戶輸入正確的驗證碼才能進行下一步操作。例如表單提交或者用戶注冊。我們可以通過創建一個單獨的PHP文件來生成驗證碼圖像,并將這個圖像與一個session中的值關聯起來。當圖像被渲染時,我們可以設置一個 cookie,供用戶在一個相當短的時限內進行判斷。如果同一IP地址很短時間內重復提交了相似的表單,則可能是由于某個腳本自動執行造成的。
<?php session_start(); //生成驗證碼 $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; $str = ""; for ($i = 0; $i < 4; $i ++) { $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1); } $_SESSION["captcha_code"] = $str; //生成圖片 $img = imagecreatetruecolor(100, 50); $white = imagecolorallocate($img, 255, 255, 255); $black = imagecolorallocate($img, 0, 0, 0); imagefilledrectangle($img, 0, 0, 100, 50, $white); imagestring($img, 5, 20, 20, $str, $black); //設置HTTP頭信息 header("Content-type: image/png"); header("Cache-control: no-cache, must-revalidate"); header('Pragma: no-cache'); imagepng($img); imagedestroy($img); ?>
還有一種常見的技術叫做Javascript加密。它可以使用戶在提交表單的時候,自動填寫一個隱含的表單域。我們在服務器端使用加密算法,然后將結果與客戶端提交的值進行比較。如果兩者一致,則表單被確認為有效。
<?php session_start(); $salt = "r0h1nGyEGbPxoJ5uW4iKdCsLMlv6TVc7paYZ9qXSDktHzQj8fmwU2N1AeF"; $password = "mypassword"; $encrypted_password = md5($salt . $password); $encrypted_js = '<script type="text/javascript">document.write(encrypted_password);</script>)'; ?> <form method="post" action="process.php"> <input type="hidden" name="password_js" value="<?= $encrypted_js ?>"> <input type="password" name="password"> <input type="submit" value="Login"> </form>
以上就是兩種常見的PHP人機驗證方法的舉例。當然,還有很多其他的方法,如人類驗證碼、文字驗證碼等。通過不斷的學習和實踐,我們可以更好地利用PHP 手動建立安全的網站,并幫助我們避免不必要的麻煩。
下一篇jvm和java無關