精华内容
下载资源
问答
  • 为了防止敏感信息直接暴露,常常使用掩码对敏感信息进行隐藏 本文提供一个高性能的掩码类来实现该需求 /** * Created by 谭健 on 2017/8/19. 10:05. * © All Rights Reserved. */ public class Override ...

    Java高性能掩码类 - Override (隐藏敏感信息)

    #

    为了防止敏感信息直接暴露,常常使用掩码对敏感信息进行隐藏

    本文提供一个高性能的掩码类来实现该需求

    
    /**
     * Created by 谭健 on 2017/8/19. 10:05.
     * © All Rights Reserved.
     */
    public class Override {
    
        /**
         * 掩码缓存,当所需掩码数量在0-16范围之内的时候
         * 直接使用缓存,不需要创建内存对象,效率最高
         * <p>
         * 如果不理解这里,可以参考JDK类库的 Integer 源码 sizeTable
         */
        private static final String[] cache = {
                "*", "**", "***", "****", "*****",
                "******", "*******", "********", "*********",
                "**********", "***********", "************", "*************",
                "**************", "***************", "****************"};
    
        private static final char coverDefault = '*';
    
        /**
         * 欲掩盖的字符串
         */
        private String initialCode;
        /**
         * 掩码起始位置
         */
        private int beginIndex;
        /**
         * 掩码结束位置
         */
        private int endIndex;
        /**
         * 掩盖码,默认是 * 号
         */
        private char cover = coverDefault;
    
        /**
         * 无参构造器
         */
        public Override() {
        }
    
        /**
         * 构造器
         *
         * @param beginIndex 初始掩码位置
         * @param endIndex   结束掩码位置
         */
        public Override(String initialCode, int beginIndex, int endIndex) {
            this.initialCode = initialCode;
            this.beginIndex = beginIndex;
            this.endIndex = endIndex;
        }
    
        /**
         * 构造器
         *
         * @param beginIndex 初始掩码位置
         * @param endIndex   结束掩码位置
         */
        public Override(String initialCode, int beginIndex, int endIndex, char cover) {
            this.initialCode = initialCode;
            this.beginIndex = beginIndex;
            this.endIndex = endIndex;
            this.cover = cover;
        }
    
        /**
         * 提供四种静态方法(静态方法调用实例方法)
         * 两种实例方法
         */
        public static String getMaskSubWay(String initialCode, int beginIndex, int endIndex) {
            Override override = new Override(initialCode, beginIndex, endIndex);
            return override.getMaskSubWay();
        }
    
        public static String getMaskSubWay(String initialCode, int beginIndex, int endIndex, char cover) {
            Override override = new Override(initialCode, beginIndex, endIndex, cover);
            return override.getMaskSubWay();
        }
    
        public static String getMaskCharWay(String initialCode, int beginIndex, int endIndex, char cover) {
            Override override = new Override(initialCode, beginIndex, endIndex, cover);
            return override.getMaskCharWay();
        }
    
        public static String getMaskCharWay(String initialCode, int beginIndex, int endIndex) {
            Override override = new Override(initialCode, beginIndex, endIndex);
            return override.getMaskCharWay();
        }
    
    
        /**
         * 通过substring方式截取
         *
         * @return 完成掩码的字符串
         */
        public String getMaskSubWay() {
            if (null == initialCode || "".equals(initialCode) || "null".equals(initialCode)) {
                return "Error : variable is null. ";
            }
            return initialCode.substring(0, beginIndex - 1) +
                    cover(beginIndex, endIndex, cover) +
                    initialCode.substring(endIndex, initialCode.length());
        }
    
        /**
         * 通过char[]方式截取
         *
         * @return 完成掩码的字符串
         */
        public String getMaskCharWay() {
            if (null == initialCode || "".equals(initialCode) || "null".equals(initialCode)) {
                return "Error : variable is null. ";
            }
            char[] chars = initialCode.toCharArray();
            char[] tempBegin = new char[beginIndex - 1];
            char[] tempEnd = new char[initialCode.length() - endIndex];
            for (int varBegin = 0; varBegin < tempBegin.length; varBegin++)
            /**
             * 把掩码字符串前半段提取出来,放到一个临时变量中
             */
                tempBegin[varBegin] = chars[varBegin];
            for (int varEnd = 0; varEnd < tempEnd.length; varEnd++)
            /**
             * 把掩码字符串后半段提取出来,放到一个临时变量中
             */
                tempEnd[varEnd] = chars[endIndex + varEnd];
            /**
             * JDK系统自带的数组拷贝方法,效率要比for循环效率稍微低一些
             */
            //  System.arraycopy(chars,0,tempBegin,0,tempBegin.length);
            //  System.arraycopy(chars,0,tempEnd,0,tempEnd.length);
            return new String(tempBegin) +
                    cover(beginIndex, endIndex, cover) +
                    new String(tempEnd);
        }
    
        /**
         * 获取掩码
         *
         * @param beginIndex 起始掩码位置
         * @param endIndex   结束掩码位置
         * @return 一个掩码串
         */
        private static String cover(int beginIndex, int endIndex, char cover) {
            /**
             * 这2个值不能为负数
             */
            if (beginIndex < 0 || endIndex < 0)
                return "";
            if (beginIndex > endIndex) {
                /**
                 * 方法容错
                 *
                 * If someone accidentally wrote it backwards
                 * That doesn't matter, either
                 *
                 * 如果某人把参数写反了,那也没有关系
                 * 程序会自动把参数切换过来
                 */
                beginIndex = beginIndex ^ endIndex;
                endIndex = endIndex ^ beginIndex;
                beginIndex = beginIndex ^ endIndex;
            }
            /**
             * 如果可以使用缓存,那就使用缓存
             */
            if (endIndex - beginIndex < cache.length && cover == coverDefault)
                return cache[endIndex - beginIndex];
            /**
             * 指定 char[] 的长度是掩码的长度,最大化利用资源
             * 如果不指定,默认会是缓存最大值:16
             * 如果程序运行到这里,那么很有可能掩码数量大于16
             */
            StringBuilder sb = new StringBuilder(endIndex - beginIndex);
            for (; beginIndex <= endIndex; beginIndex++)
                sb.append(cover);
            return sb.toString();
        }
    
        /**
         * Getter and Setter in here
         */
        public static String[] getCache() {
            return cache;
        }
    
        public static char getCoverDefault() {
            return coverDefault;
        }
    
        public String getInitialCode() {
            return initialCode;
        }
    
        public void setInitialCode(String initialCode) {
            this.initialCode = initialCode;
        }
    
        public int getBeginIndex() {
            return beginIndex;
        }
    
        public void setBeginIndex(int beginIndex) {
            this.beginIndex = beginIndex;
        }
    
        public int getEndIndex() {
            return endIndex;
        }
    
        public void setEndIndex(int endIndex) {
            this.endIndex = endIndex;
        }
    
        public char getCover() {
            return cover;
        }
    
        public void setCover(char cover) {
            this.cover = cover;
        }
    }

    如何使用这个类

        public static void main(String[] args) {
            // 静态方法调用
            Override.getMaskCharWay("15197447018",3,9);
            Override.getMaskCharWay("15197447018",3,9);
            Override.getMaskCharWay("15197447018",3,9,'-');
            Override.getMaskCharWay("15197447018",3,9,'-');
            // 实例方法调用
            Override override = new Override();
            override.setCover('+');
            override.setBeginIndex(3);
            override.setEndIndex(9);
            override.setInitialCode("15197447018");
            // 构造器调用
            Override overrideX = new Override("15197447018",3,9);
            Override overrideZ = new Override("15197447018",3,9,'-');
            // 错误调用 - 反向调用
            Override overrideW = new Override("15197447018",9,3);
    
        }
    展开全文
  • 对常规的脚本注入,一般需要提交参数后根据服务器的返回信息判断是不是可以注入,可以通过设置将其默认错误消息屏蔽掉:  在 IIS 管理器中打开"应用程序调试"书签,将"脚本错误消息"改为"发送文本",再自定义一个错误...
    
    <script type="text/javascript"
    src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
    </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

    对常规的脚本注入,一般需要提交参数后根据服务器的返回信息判断是不是可以注入,可以通过设置将其默认错误消息屏蔽掉:
     在IIS管理器中打开"应用程序调试"书签,将"脚本错误消息"改为"发送文本",再自定义一个错误页面或者是错误信息就可以了.

     
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
    <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>
    展开全文
  • 公布到网页上的Email经常会被一些工具自动提取,一些非法...我在看DotNetNuke(以下简称DNN)的源代码时发现了一个不错 的方式来防止这些信息被自动提取。 在DNN中有这么一段函数(Globals.vb中): PublicFunct...

    公布到网页上的Email经常会被一些工具自动提取,一些非法用户就会利用所提取的Email大肆发送垃圾邮件。这些工具大多都是查找链接中 “mailto:”后面的信息或是“@”前后的信息来达到提取Email的目的。我在看DotNetNuke(以下简称DNN)的源代码时发现了一个不错 的方式来防止这些信息被自动提取。

    在DNN中有这么一段函数(Globals.vb中):

    Public Function CloakText(ByVal PersonalInfo As StringAs String

        
    If Not PersonalInfo Is Nothing Then
            
    Dim sb As New StringBuilder

            
    ' convert to ASCII character codes,将字符串转换成ASCII编码字符串形式
            sb.Remove(0, sb.Length)
            
    Dim StringLength As Integer = PersonalInfo.Length - 1
            
    For i As Integer = 0 To StringLength
                sb.Append(
    Asc(PersonalInfo.Substring(i, 1)).ToString)
                
    If i < StringLength Then
                    sb.Append(
    ",")
                
    End If
            
    Next

            
    ' build script block
            Dim sbScript As New StringBuilder

            sbScript.Append(vbCrLf 
    & "<script language=""javascript"">" & vbCrLf)
            sbScript.Append(
    "<!-- " & vbCrLf)
            
    'fromCharCode 方法:从一些 Unicode 字符值中返回一个字符串。
            sbScript.Append("   document.write(String.fromCharCode(" & sb.ToString & "))" & vbCrLf)
            sbScript.Append(
    "// -->" & vbCrLf)
            sbScript.Append(
    "</script>" & vbCrLf)

            
    Return sbScript.ToString
        
    Else 
            
    Return Null.NullString
        
    End If

    End Function

    C#代码如下:

    private string CloakText(string text)
    {
    StringBuilder sb = new StringBuilder();
    System.Text.ASCIIEncoding asciiEncoding = new ASCIIEncoding();
    byte[] bytes = new byte[text.Length];
    int count = asciiEncoding.GetBytes(text,0,text.Length,bytes,0);
    for(int i=0;i<count;i++)
    {
    sb.Append((int)bytes[i]);
    if(i<count-1)
    {
    sb.Append(",");
    }
    }
    return sb.ToString();
    }
     

    --------------------------------------------------------------------------------------------------------

    该段代码先将需要加密的信息转换成ASCII编码字符串形式,然后用javascript中的document.write方法写到页面。

    我测试了以下效果,还不错。大家也可以试试。

    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
    <title>测试信息加密</title>
    </head>

    <body>
    可以被提取的链接:
    <href="mailto:aaa@163.com">aaa@163.com</a><br>
    不能被提取的链接:
    <script language="javascript">
    <!-- 
       document.write(String.fromCharCode(
    60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,120,120,120,64,116,111,109,46,99,111,109,34,62,120,120,120,64,116,111,109,46,99,111,109,60,47,97,62))
    // -->
    </script>
    </body>
    </html>


    如果大家有兴趣,还可以用更加复杂的方法来进行加密,一句话:再也不能让人轻易获取信息了!

    这个不是防破解的,作用是防止蜘蛛偷用户EMAIL等信息发拉圾用的。因此跟破解没有关系。

    转载于:https://www.cnblogs.com/starspace/archive/2009/05/07/1451417.html

    展开全文
  • [引用][DNN学习所得]如何防止页面中的敏感信息被提取http://esshs.cnblogs.com/archive/2005/10/18/257155.html
    [引用][DNN学习所得]如何防止页面中的敏感信息被提取
    http://esshs.cnblogs.com/archive/2005/10/18/257155.html
    展开全文
  • 防止敏感信息泄漏,保护用户和企业信息隐私,是企业安全中重要的环节。 通过检测日志中的敏感信息,能够: 排查潜在的泄漏敏感信息的系统和接口,防止被黑产恶意利用,盗取用户敏感信息 检查数据传输、日志打印的...
  • 今天在逛 二十四画生 的bolg的时候发现他提到"在asp.net中如何防止用户的敏感信息如email地址经常会被一些工具自动提取,一些非法用户就会利用所提取的Email大肆发送垃圾邮件".偶有心得,觉得这个办法非常不错...
  • ...The QR code itself is generated as an image as such: <pre><code><...chld=M%7C0&cht=qr&...issuer=Example" alt="QR code">...<p>Because this QR code contains sensitive information, I was ...
  • Linux 为reboot等敏感命令执行时添加提示确认信息防止误重启) 编辑/etc/profile文件,添加以下代码: sendya_reboot() { while true do echo -n "You really want to restart the server? (yes/no):" read ...
  • 公布到网页上的Email经常会被一些工具自动提取,一些非法...我在看DotNetNuke(以下简称DNN)的源代码时发现了一个不错的方式来防止这些信息被自动提取。在DNN中有这么一段函数(Globals.vb中):Public Function Cl
  • 敏感信息加密处理

    2017-03-16 09:34:00
    版权声明:本文为博主原创文章,转载请注明出处,欢迎使劲喷 一、敏感信息加密处理我们要实现什么 系统往往需要将用户...然后,有时我们为了防止被脱库导致的数据泄漏,不得不对一些敏感信息(比如:身份证号、...
  • 云waf防敏感信息泄露

    2020-05-26 11:21:50
    敏感信息泄漏是Web应用防火墙针对网安法提出的“网络运营者应当采取技术措施和其他必要措施,确保其收集的个人信息安全,防止信息泄露、毁损、丢失。 在发生或者可能发生个人信息泄露、毁损、丢失的情况时,应当...
  • Robots.txt泄露敏感信息

    2021-01-04 16:37:59
    Robots.txt泄露敏感信息 首先robots是什么? Robots是网址和爬虫之间的协议,网站通过robots协议(robots.txt)来告诉搜索引擎哪些页面可以进行抓取。 搜索蜘蛛在访问一个网站时,会首先检查站点跟目录下是否存在...
  • 应用程序的用户可能会在不应该输入的地方输入敏感信息,例如信用卡号。 如果在网站或应用程序中的表单中输入了信用卡号,则该信用卡号可能会存储到数据库中或被记录下来。 对于企业来说,这可能是不可取的,因为要...
  • 该软件用于将敏感信息存储在内存中。 该程序包试图减少敏感数据在内存中被暴露的可能性。 它旨在支持所有主要操作系统,并使用纯Go语言编写。 产品特点 敏感数据使用XSalsa20Poly1305在内存中进行加密和身份验证。 ...
  • 敏感信息(姓名、身份证)存入数据库时应当需要加密,防止被恶意访问数据库时暴露信息。 解决方案 由于项目数据库中间件使用的是Mybatis,所以使用Mybatis中的BaseTypeHandler的一个类型处理器,对数据进行AES加密存入...
  • 我们可以在其中办公、娱乐、学习包括到生活中的很多地方都离不开它的存在,在这个信息化时代离开网络的支持我们将变得寸步难行,而如今在网络上浏览网页,注册账号、使用软件app等操作都会暴露一些个人敏感信息在...
  • 安全地,轻松地在敏感照片上添加水印。 为了防止它们被坏家伙泄漏或利用。 当然,它也适合制作表情符号。 毕竟,它支持具有非常幽灵般效果的图像水印。 特征 令人兴奋的 :glasses: 完全脱机的本地应用程序,可在...
  • 前言在我们的应用程序,为了防止hardcode,通常会把程序中可能会变的,或者与环境相关的信息抽离出来,从而形成配置文件。SpringBoot配置文件中的内容通常情况下是明文显示,安全性就比较低一些。在application....
  • 1、页面表单传输为防止网页表单数据提交时被窃取,表单提交时,需要对表单内容进行加密处理,但对于登录时的密码,不仅要进行加密处理,还得保证每次提示登录请求时,密码的密文不一致,要不然***绕过表单也能访问...
  • 敏感,涉及用户隐私。 能否拦截访问 <code>TelephonyManager</code> 等系统服务,返回空值等操作,不让SDK拿到这些数据? 同时,高德等阿里系SDK还会向 SD 卡的 <code>.DataStorage...
  • 防止网页表单数据提交时被窃取,表单提交时,需要对表单内容进行加密处理,但对于登录时的密码,不仅要进行加密处理,还得保证每次提示登录请求时,密码的密文不一致,要不然黑客绕过表单也能访问后台系统。...
  • 3、加密存储:将敏感配置信息加密后存储,仅在使用前临时解密,以进一步防止信息泄露。 4、安全传输:企业内网环境并非100%可信,通过HTTPS等加密手段以保证敏感配置信息的传输安全。 5、日志记录:尽量详细记录下...
  • 时间扫描延迟,主要为防止BanIP,不想延迟可以设置为0 即使线程,可以直接在snail.py 33行更改线程数 最后,由于该扫描器如其名——snail(蜗牛),扫描得很慢,所以推荐挂在服务器上:nohup python3 snail.py ...
  • 关键代码引用自...这就会造成如果上传到github之类的网站就会造成信息泄露(比如keystore密码之流) 首先改写原来含有签名配置的gradle文件内容如下android { signingConfigs {
  • 声明 好好学习,天天向上 漏洞描述 ...ThinkPHP从诞生以来一直秉承简洁实用的设计...这就防止了php在5.3.6下有个PDO本地查询造成SQL注入的漏洞。 影响范围 ThinkPHP < 5.1.23 复现过程 这里使用5.0.9版本 使用vulhub

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 864
精华内容 345
关键字:

防止敏感信息