HTML5中使用图片隐藏传递密文

本文介绍如何利用HTML5的Canvas API中的getImageData和putImageData函数,在图片中嵌入并提取文字信息。通过简单的JavaScript代码示例,展示了将文本转换为图像数据,并通过调整像素值来隐藏和读取文本的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



上面的两张图片中,你能看出有什么不同吗?

右图使用 html5 canvas api 中的 getImageDataputImageData 函数嵌入了一段文字。

道理很简单,getImageData 函数返回一个 ImageData 对象,该对象包含三个属性: data 是一个字节数组,每 4 字节表示图片中一个像素,按照“ 红、绿、蓝、透明度”的顺序依次排列,width 表示图片宽度,height 图片高度。
只要将我们的密文转成 0 - 255 之间的数值,存入数组,然后再显示成图片。读取时反向读取并转码就可以了。


<!DOCTYPE html>
<html >
    <head>
        <meta charset="utf-8">
        <title>Hello...</title>
        <style type="text/css">
        </style>
    </head>
    <body>
        <canvas id="canvas1"></canvas>
        <script> 
            var pic;
            var canvas;
            var ctx;
            var imgData;
            var data;
            
            window.onload = function(){
                canvas = document.getElementById("canvas1");
                ctx = canvas.getContext("2d");
                
                canvas.width = 400;
                canvas.height = 200;
                
                pic = new Image();
                pic.onload = function(){
                    ctx.drawImage(pic, 0, 0, pic.width, pic.height);
                    imgData = ctx.getImageData(0, 0, pic.width, pic.height);
                    data = imgData.data;

                    // put the secret
                    //var s = encodeURI("we dream and we build.we never give up.we never quit.");
                    var s = encodeURI("女神,约吗?");
                    for(var j=0; j<s.length; j++){
                        data[j*400+3] = 255 - s.charCodeAt(j);
                    }
                    ctx.putImageData(imgData, 130, 0);
                    
                    //get the secret 
                    var dImgData = ctx.getImageData(130, 0, pic.width, pic.height);
                    var dData = dImgData.data;
                    var ds = "";
                    for(var k=3; k<dData.length; k+=400){
                        var t = String.fromCharCode(255 - dData[k]);
                        ds += t;
                    }
                    
                    console.log(decodeURI(ds));
                }
                pic.src = "./img/xixi.jpg";
                
            };
        </script>

    </body>
</html>

注: 示例代码中的密文仅仅是为了测试中文,顺路为男神读者们服务的。http://www.duxia.org/book/17617.html

### 常见 SQL 注入类型 #### GET 参数注入 通过URL中的参数传递恶意SQL代码,服务器处理这些请求时可能会执行未过滤的输入。这种类型的注入非常普遍,因为许多网站依赖于GET请求来获取动态内容。 ```python vulnerable_url = "http://example.com/page.php?id=1 OR 1=1" ``` #### POST 参数注入 与GET不同的是,POST方法通常用于提交表单数据,在此过程中如果缺乏适当的安全措施,则可能被用来发送有害的数据给服务器端脚本进行解析并执行。 ```html <form action="login.php" method="post"> <input type="text" name="username"/> <input type="password" name="passwd"/> </form> ``` 当用户登录失败后返回页面显示错误信息泄露了数据库结构或版本号等敏感资料即为基于报错的信息泄漏[^1]。 #### Cookie 和 HTTP 头部信息注入 除了传统的查询字符串外,Cookies以及HTTP头也可能是潜在的风险区域。例如Session ID存储不当就容易成为攻击目标;而Referer字段则可用于追踪来源网址从而实施跨站请求伪造(CSRF)攻击。 #### 用户名/密码字段注入 注册和认证环节往往是薄弱之处之一,特别是那些简单地拼接用户名和口令到SQL命令里的实现方式更容易受到威胁。 --- ### 检测手段 对于上述提到的各种形式的SQL注入风险点,可以通过如下几种方式进行识别: - **手动审查源码**:仔细检查所有涉及到构建SQL语句的地方是否存在直接嵌套外部可控变量的情况。 - **使用静态分析工具**:这类程序能够自动扫描项目文件寻找可能存在安全隐患的位置,并给出改进建议。 - **动态测试框架**:像OWASP ZAP这样的平台支持模拟真实的浏览器行为向应用发起一系列精心设计过的请求以期触发隐藏缺陷。 - **模糊测试(Fuzzing)**:随机生成大量非法输入尝试突破防线找出未知漏洞。 --- ### 防御策略 针对以上提及的问题,建议采取以下综合性的防护方案: - **采用预编译语句(PreparedStatement)**:这是最有效的防止SQL注入的方法之一。它使得应用程序可以在运行前准备好要执行的操作而不受后续传入值的影响。 ```java String query = "SELECT * FROM users WHERE username=? AND password=?"; PreparedStatement pstmt = connection.prepareStatement(query); pstmt.setString(1, userProvidedUsername); pstmt.setString(2, hashedPassword); // 注意这里应该是散列后的密文而非明文 ResultSet rs = pstmt.executeQuery(); ``` - **严格校验输入合法性**:无论是来自前端还是后台接口都应设定合理的格式限制并对不符合预期的内容予以拒绝接收。 - **遵循最小权限原则**:确保连接池配置只授予必要的操作许可级别,减少一旦发生越权事件所造成的损害程度。 - **定期更新补丁库**:保持使用的第三方组件处于最新状态有助于规避已知弱点带来的隐患。 - **教育开发团队成员重视安全性编程习惯养成**:鼓励大家学习最佳实践案例分享经验教训共同进步。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值