10:敏感数据

安全568 字

■ 客户端保存

场景:在客户端需要保存用户信息时,为了防止泄露需要对其进行加密处理。

说明:客户端保存敏感信息时,禁止其表单中的自动填充功能,以明文形式保存敏感信息。

用户信息使用AES对称加密算法加密。

■ 服务器保存

场景:服务器端处理敏感信息后,需要及时清除防止泄露信息。

说明:服务端保存敏感信息时,禁止在程序中硬编码敏感信息,明文存储用户密码、身份证号、银行卡号、持卡人姓名等敏感信息,临时写入内存或文件中的敏感数据,应及时清除和释放。

PHP示例:可以及时清理敏感数据。

<?php
    session_start();
    $username = $_POST['username'];
    $password = $_POST['password'];
    if ($username == '' || $password == '') {
        exit("用户名和密码都不能为空");
    } else {
        $row = getUserInfo($username, $password);
        unset($username);
        unset($password);
        if (empty($row)) {
            exit("用户名和密码都不正确");
        } else {
            $_SESSION['user_info'] = $row;
            if (!empty($remember)) {
                setcookie("username", $username, time()+60*60*24, "/home/www/");
            }
            header("location:" . $ref_url );
        }
    }
?>

■ 服务端保存-禁止在代码中硬编码敏感信息

场景:代码中要进行连接数据库等涉及到敏感信息操作的时候,要避免使用硬编码,应将敏感信息放到配置文件单独保存,需要的时候读取使用。

说明:服务端保存敏感信息时,禁止在程序中硬编码敏感信息。

下面的代码将IP直接写到代码中,攻击者可以通过反编译java类文件得到这些敏感信息。

class IPaddress {
    public $ipAddress = "172.16.254.1";
}
  

正确的代码示例:从serveripaddress.txt中读取ip地址,然后再进行其他操作。

下面为错误实现方式,直接采用了硬编码,将用户名和密码直接写到了代码中:

public getConnection()  {
    return DriverManager.getConnection("mysql://localhost/dbName","username", "password");
}    

正确的实现方式:将用户名密码等重要信息写到配置文件中,使用的时候从配置文件中读取对应信息。

■ 服务端保存-禁止明文存储密码等信息

场景:服务端对用户密码等敏感信息进行存储的场景。

说明:服务端保存敏感信息时,禁止明文存储用户密码、身份证号、银行卡号、持卡人姓名等敏感信息。

PHP 示例:定义专门的密码哈希方法hashPassword(),在对密码进行操作时,调用该方法先对密码进行处理。

maksim
Maksim(一笑,吡罗),PHPer,Goper
OωO
开启隐私评论,您的评论仅作者和评论双方可见