為什么不要上傳原圖?一張圖片背后能提取多少信息?

科普:圖片中的EXIF信息
EXIF是Exchangeable Image File Format的縮寫(xiě),它是一種用于在數(shù)字圖像文件中存儲(chǔ)元數(shù)據(jù)的標(biāo)準(zhǔn)格式。元數(shù)據(jù)是關(guān)于圖片的信息,比如拍攝設(shè)備、拍攝日期和時(shí)間、曝光時(shí)間、ISO值、焦距、GPS定位等信息。
EXIF信息通常由數(shù)碼相機(jī)、智能手機(jī)等設(shè)備在拍攝照片時(shí)自動(dòng)添加到圖像文件中。這些數(shù)據(jù)可以提供有關(guān)照片的詳細(xì)信息,使用戶能夠了解拍攝環(huán)境以及使用的攝影設(shè)置。EXIF還可以記錄一些特定于設(shè)備的信息,如制造商和型號(hào)。
很多對(duì)社工感興趣的小伙伴,這時(shí)應(yīng)該會(huì)有一個(gè)大膽的想法,那就是圖片里如果包含了GPS定位信息
,那豈不是別人發(fā)個(gè)朋友圈不用定位我們也知道在哪里了呢?(發(fā)朋友圈不就是為了展示自己在哪?)不妨現(xiàn)在就來(lái)試一試吧
演示:尋找下面圖片的EXIF信息
我這里找了一張昨天隨手拍的一張照片,大家可以用這張圖做測(cè)試進(jìn)行驗(yàn)證

通過(guò)電腦自帶的工具查看
下載完圖片后,右鍵屬性
,點(diǎn)擊詳細(xì)信息

這里面就可以看到很多參數(shù)了,當(dāng)然也包括最重要的定位

到了這里如果你不嫌麻煩,可以用在線工具來(lái)找到具體定位
我們粗略的填入上方的29和108

發(fā)現(xiàn)這里和我的實(shí)際位置相差有點(diǎn)大,那么我們?cè)倬_一點(diǎn)

真正想要獲取大家個(gè)人的人肯定不會(huì)用這么傻的方法,下面為大家講解高效的批量獲取
使用Python實(shí)現(xiàn)獲取圖片EXIF信息
這里主要就是使用了exifread
模塊讀取圖片的exif
信息,測(cè)試使用中需要安裝
exifread模塊和Requests模塊
相關(guān)代碼
import requests
import exifread
class GetPhotoInfo:
? ? def __init__(self, photo):
? ? ? ? self.photo = photo??
? ? ? ? self.ak = '填寫(xiě)自己的百度ak'
? ? ? ? self.location = self.get_photo_info()
? ? def get_photo_info(self, ):
? ? ? ? with open(self.photo, 'rb') as f:
? ? ? ? ? ? tags = exifread.process_file(f)
? ? ? ? try:
? ? ? ? ? ? # 打印照片其中一些信息
? ? ? ? ? ? print('拍攝時(shí)間:', tags['EXIF DateTimeOriginal'])
? ? ? ? ? ? print('照相機(jī)制造商:', tags['Image Make'])
? ? ? ? ? ? print('照相機(jī)型號(hào):', tags['Image Model'])
? ? ? ? ? ? print('照片尺寸:', tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength'])
? ? ? ? ? ? # 緯度
? ? ? ? ? ? lat_ref = tags["GPS GPSLatitudeRef"].printable
? ? ? ? ? ? lat = tags["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
? ? ? ? ? ? lat = float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / float(lat[3]) / 3600
? ? ? ? ? ? if lat_ref != "N":
? ? ? ? ? ? ? ? lat = lat * (-1)
? ? ? ? ? ? # 經(jīng)度
? ? ? ? ? ? lon_ref = tags["GPS GPSLongitudeRef"].printable
? ? ? ? ? ? lon = tags["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")
? ? ? ? ? ? lon = float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / float(lon[3]) / 3600
? ? ? ? ? ? if lon_ref != "E":
? ? ? ? ? ? ? ? lon = lon * (-1)
? ? ? ? except KeyError:
? ? ? ? ? ? return "ERROR:請(qǐng)確保照片包含經(jīng)緯度等EXIF信息。"
? ? ? ? else:
? ? ? ? ? ? print("經(jīng)緯度:", lat, lon)
? ? ? ? ? ? return lat, lon
? ? def get_location(self):
? ? ? ? url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json' \
? ? ? ? ? ? ? '&coordtype=wgs84ll&location={},{}'.format(self.ak, *self.location)
? ? ? ? response = requests.get(url).json()
? ? ? ? status = response['status']
? ? ? ? if status == 0:
? ? ? ? ? ? address = response['result']['formatted_address']
? ? ? ? ? ? print('詳細(xì)地址:', address)
? ? ? ? else:
? ? ? ? ? ? print('baidu_map error')
if __name__ == '__main__':
? ? Main = GetPhotoInfo('IMG_6623.jpg')
? ? Main.get_location()
配置過(guò)程中可能會(huì)遇到的坑
使用pip安裝的時(shí)候如果你習(xí)慣開(kāi)了vpn
,很有可能會(huì)報(bào)錯(cuò),然后還查不到原因。

為防止這里被別有用心的人利用,這里我就點(diǎn)到為止了(真正想干壞事的也不用我這小菜雞教)
寫(xiě)這篇文章只是為了從一個(gè)人肉者,開(kāi)盒者的角度提醒大家注意防范個(gè)人隱私的泄露。
最后引用一句網(wǎng)友的話“對(duì)于大多數(shù)人來(lái)說(shuō),個(gè)人信息會(huì)不會(huì)泄露,不取決于你想不想泄露,而取決于有沒(méi)有人想要”