02 输出编码: HTML 转码和信息脱敏

安全320 字

编码场景

场景:不可信数据输出到前后端页面时,需要考虑可能的代码注入情况。

说明:不可信数据输出到前后端页面时,根据输出场景对其进行相关编码,如HTML实体编码、URL编码。

<html>
    <body>
        <?php
            $str = $_POST['feed'];
            echo htmlspecialchars($str, ENT_QUOTES);
        ?>
    </body>
</html>

净化场景

场景:输出到前后端页面时,如果包含敏感信息需要做脱敏等处理再输出。

说明:针对操作系统命令、SQL和LDAP查询,净化所有输出的敏感信息,如银行卡、手机号、系统信息等。

<?php
    class DesensitizedUtils {
        //【中文姓名】只显示第一个汉字,其他隐藏为2个星号,比如:李**
        function chineseName($str) {
            $resstr = substr_replace($str, '*', 1);
            return $resstr;
        }

        // 【身份证号】显示最后四位,其他隐藏。共计18位或者15位,比如:*************1234    
        function idCardNum($str) {
            $resstr = substr_replace($str, '**************', 0);
            return $resstr;
        }
    
        //【固定电话】 显示后四位,其他隐藏,比如:*******3241
        function fixedPhone($str) {
            $resstr = substr_replace($str, '****', 3, 4);
            return $resstr;
        }
    
        // 【手机号码】前三位,后四位,其他隐藏,比如:135****6810
        function mobilePhone($str) {
            $resstr = substr_replace($str, '****', 3, 4);
            return $resstr;
        }    
    
        // 【地址】只显示到地区,不显示详细地址,比如:上海徐汇区漕河泾开发区***
        function address($str) {
            $resstr = substr_replace($str, '****', -4);
            return $resstr;
        }
    
        // 【电子邮箱】 邮箱前缀仅显示第一个字母,前缀其他隐藏,用星号代替,@及后面的地址显示,比如:d**@126.com
        function email($str) {
            $resstr = substr_replace($str, '****' , 1);
            return $resstr;
        }
    
        // 【银行卡号】前六位,后四位,其他用星号隐藏每位1个星号,比如:622261******1234
        function bankCard($str) {
            $resstr = substr_replace($str, '******', 6);
            return $resstr;
        }
    
        // 【密码】密码的全部字符都用*代替,比如:******
        function password($str) {
            $resstr = substr_replace($str, '*', 0);
            return $resstr;
        }
    }
maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见