php 单页面登陆注册实例,附 XSS 攻击试验实例

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<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冰雪青松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值