你的照片安全么?
时间:2022-05-11
本文章向大家介绍你的照片安全么?,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
照片元信息
我们平时拍摄的图片,不仅包含了可见的像素信息,还包含了我们看不到的隐藏信息(元信息),而这些元信息,往往会不经意间泄露我们的隐私.
我们先来看看平时我们拍摄的照片里面,到底藏了哪些信息;
(1) iPhone6s照片元信息的提取:
iPhone6s
运行脚本
手机拍摄的照片,元信息非常丰富,包含了光圈/快门等拍摄参数,也包含了拍摄时间,拍摄地点等个人隐私信息,所以不要轻易将未经处理的原图发送给他人,尤其不要随意上传原图!
(2) 佳能70D拍摄照片元信息的提取:
佳能70D
运行脚本
相机拍摄的图片与手机类似,同样包含了地理信息,拍摄时间信息;
相机拍摄的图片,摄影师一般会使用软件进行后期处理,为了保护隐私,图片在导出时记得勾选消除元信息的选项(下图为Adobe Lightroom的导出示例)
Lightroom消除元信息
不只是我们平常拍的照片,网站图片的也可能存在安全隐患;
黑客通过爬虫批量下载网站图片,然后分析网站图片的元数据,从中获取有价值的信息,有的网站对于用户上传的图片处理的很好,有的网站做的就不够理想...
(3) 高校网站:
高校的官网大多年久失修,底层框架陈旧,网站安全性不是很好,高校网站的图片,一般没有进行过专业的后期处理,几乎是拍完即用,有很多安全隐患,以我从学校官网下载的新闻图片为例:
仅从图片的命名就可以确定拍摄的时间; 通过读取图片的元信息可以了解到,相机型号: 佳能750D; 拍摄时间:2017年6月23日下午4点15分16秒; 最应该消除的GPS信息被保留了下来...
不讲了...高校的网站安全建设有待提高...
学校
运行脚本
(4) 政府官网图片元信息:
下面这张图片是从政府官网找到的,与高校官网的图片相比,图片命名看不到有价值的信息,通过读取元信息,能了解到: 相机型号:Canon EOS-1D X Mark II, 拍摄时间:2017年9月13日下午3点48分13秒拍摄...
与高校相比,政府官网的图片信息相对安全
官网
运行脚本
(5)简书网站的图片
简书
运行脚本
简书网站的图片找不到任何图片元信息的,大家可以放心上传!不只是简书,微博,微信,qq等主流的社交平台,为了减少服务器存储图片的开销,会主动帮用户主动消除元信息,只要你不往平台上传原图,就基本可以保证信息的安全!
我想消除图片隐藏的信息,怎么办?
这里提供一个python脚本,将脚本和图片放到一起,然后运行脚本即可:
python脚本
GIF演示中, 009是为了前后对比,验证清除的效果,其实只需运行010即可!
批量消除图片元信息的脚本(010删除Exif.py)
import piexif
import sys
import os
import re
def remove_all_exif(image_names):
for image_name in image_names:
try:
piexif.remove(image_name)
print(image_name,"exif信息清除完毕")
except Exception:
pass
def get_images():
all_file_names = os.listdir()
image_names = list()
for file_name in all_file_names:
if re.match(r".*.(jpg|JPG|png)",file_name):
image_names.append(file_name)
print("已经将",file_name,"添加到列表!")
else:
pass
return image_names
def main():
image_names = get_images()
remove_all_exif(image_names)
pass
if __name__ == "__main__":
main()
批量获取图片元信息的脚本(009提取Exif.py)
import os
import sys
import re
import PIL
from PIL import Image
from PIL.ExifTags import TAGS
def get_Exif(image_names):
for image_name in image_names:
print("开始读取",image_name)
exifData = dict()
imgFile = Image.open(image_name)
try:
info = imgFile._getexif()
if info:
print(image_name,"的信息为:")
for (key, value) in info.items():
nice=TAGS.get(key, key)
print("%s(%s) = %s"%(nice, key, value))
if nice == "GPSInfo":
print("---%s(%s) = %s---"%(nice,key,value))
elif re.match(r"^Date.*", nice):
print("%s(%s) = %s"%(nice, key, value))
else:
pass
else:
print("没有任何元信息!")
except Exception as e:
print(e)
def get_images():
all_file_names = os.listdir()
image_names = list()
for file_name in all_file_names:
if re.match(r".*.(jpg|JPG|png|jpeg)",file_name):
image_names.append(file_name)
else:
pass
return image_names
def main():
image_names = get_images()
get_Exif(image_names)
pass
if __name__ == "__main__":
main()
如果您喜欢python,喜欢故事,请点赞或关注我!您的支持是对作者最大的鼓励!
- AVFoundation 框架初探究(二)
- 关于视图和存储过程的权限问题探究 (r9笔记第87天)
- Java基础-day08-超市购物系统总结
- AVFoundation 框架初探究(一)
- 【Go 语言社区】 HTML5 前端--数据保存实例
- crontab设置导致的服务器进程异常问题 (r10笔记第4天)
- 一条SQL语句的执行计划变化探究(r10笔记第3天)
- tensorflow(一)windows 10 python3.6安装tensorflow1.4与基本概念解读
- 基于AgileEAS.NET SOA 中间件领域模型数据器快速打造自己的代码生成器
- Java基础-day07-代码题-自定义数据类型;ArrayList集合
- 一条报警信息的快速处理和分析(r9笔记第99天)
- 【Go 语言社区】解析Go语言编程中的struct结构
- centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建
- 【Go 语言社区】Golang 语言获取本机逻辑CPU数量的方法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法