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;
}
}