1.php 单页面登陆、注册试验程序
包括前后端验证,后端防 XSS 攻击,不包括 SQL 注入内容;密码散列值(hash)的创建与哈希验证。
/* 这是 php 官方推荐的密码处理函数 */
password_hash() //创建密码的散列(hash)
password_verify() //验证密码是否和指定的散列值匹配。
程序如下,分三部分:php 部分、html部分和javascript部分:
<?php
/**
* php 后端程序部分 #############################
*
*/
class manage{
/**
* 对 POST 请求进行过滤
*
*/
public static function post($input){
// 功能:既转换双引号也转换单引号。
// 这是 php 防范 SQL 注入的,但是太简单了,
// 防 SQL 注入比较有效的方法是:
// 1.使用 PDO 的数据绑定;
// 2.尽量使用 MySQL 的视图;
// 3.尽量使用 memcache、redis 作为数据缓存;
// 4.如果是像博客等这样的非时效性内容程序,第一次读取数据库,可以把页面缓存到磁盘或者内存中,
// 以后的 SQL 请求,直接读取缓存文件,既能提高并发能力,又能防 SQL 注入。
$str = htmlspecialchars($_POST[$input], ENT_QUOTES);
return substr($str, 0, 30);
}
/**
* 对 GET 请求进行过滤
*
*/
public static function get($input){
$str = htmlspecialchars($_GET[$input], ENT_QUOTES);
return substr($str, 0, 30);
}
/**
* 如果用上面的 POST、GET 过滤觉得万事大吉了,
* 那也不一定够用,因为可以把非法代码进行各种
* 形式的编码,使漏洞防不胜防。
*
* 请参考下面的链接到 XSS 速查表,替换一些特征
* 字符,把漏洞降到最低水平。
* https://www.freebuf.com/news/153055.html
*/
public static function customFilter($str){
/**
* 字符串替换函数替换敏感字符串
*/
//搜索字符串示例
$findStr = array(
'%' //防十六进制编码
//...省略
);
//替换字符串
$replaceStr = array(
''
//...省略
);
$str1 = str_replace($findStr, $replaceStr, $str);
/**
* 正则表达式替换敏感字符
*
*/
//正则搜索字符串示例
$patterns = array(
'/javascript:/i',
'/<script.*\/script>/i'
//...省略
);
//替换字符串
$replacements = array(
'[forbid]',
'[forbid]',
//...省略
);
return preg_replace($patterns, $replacements, $str1);
}
}
//就当数据库来用
$file = 'data.txt';
//【1】登陆处理
if(filter_has_var(INPUT_POST, "isVerify")){
$isVer = manage::post('isVerify');
if($isVer === 'display'){
$email = manage::post('email');
$pass = manage::post('pwd');
// filter 过滤器进行邮箱合规性检查
if(!filter_var($email, FILTER_VALIDATE_EMAIL<