有没有办法在图像或电影文件的原始数据中嵌入 URL 调用,以便在打开图像或电影时调用网络服务器?我希望能够通过向某人发送图像来获取他们的外部 IP,然后让图像回调我控制的网络服务器。
我只是想知道是否可以将某些 PHP 脚本嵌入到图像文件中。
有没有办法在图像或电影文件的原始数据中嵌入 URL 调用,以便在打开图像或电影时调用网络服务器?我希望能够通过向某人发送图像来获取他们的外部 IP,然后让图像回调我控制的网络服务器。
我只是想知道是否可以将某些 PHP 脚本嵌入到图像文件中。
任何此类功能都取决于所使用的播放器或查看器。我知道没有任何图像格式需要观众进行任何类型的交互,但某些视频格式确实(或者更确切地说,确实)使用了它。
除了0xea提到的Quicktime,Windows Media/ASF格式允许嵌入脚本命令,其中之一就是打开一个URL:
http://support.microsoft.com/kb/828026
当内容所有者创建音频或视频流时,该内容所有者可以添加嵌入流中的脚本命令(例如 URL 脚本命令和自定义脚本命令)。播放流时,脚本命令可以触发嵌入式播放器程序中的事件,或者它们可以启动您的 Web 浏览器,然后连接到特定的网页。此行为是设计使然。
但是,这种行为:
所以,我不会依赖它。
编辑
说到图像,我刚刚意识到 SVG 使用的是 XML。XML 文件可能包含对外部 URL 的引用,例如 DTD 或模式。此外,SVG 本身支持引用同一文档中的其他元素,有时也支持引用外部元素:
http://www.w3.org/TR/SVG/struct.html#Head
我刚刚尝试过并打开以下 SVG 结果以获取到 Opera 中的远程服务器,但不是 IE:
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="8cm" height="3cm" xmlns="http://www.w3.org/2000/svg" version="1.1">
<desc>Local URI references within ancestor's 'defs' element.</desc>
<defs>
<linearGradient id="Gradient01">
<stop offset="20%" stop-color="#39F" />
</linearGradient>
</defs>
<!-- reference to a local definition -->
<rect x="1cm" y="1cm" width="6cm" height="1cm"
fill="url(#Gradient01)" />
<!-- this element triggers a fetch of the specified URL in Opera -->
<rect x="1cm" y="1cm" width="6cm" height="1cm"
fill="url(http://example.com/test1)" />
</svg>
所以,它再次是特定于观众的,但您可能有更多的机会进行这项工作。
您要求的是非常接近远程代码执行,这通常是安全禁忌。有一些格式允许类似的事情。
据我所知,MOV 文件格式允许您在其中嵌入 url 或别名以用于电影的替代版本。我认为它通常用于流媒体目的,以便播放器可以请求更高或更低质量的电影和类似的东西。
我不知道这方面的很多细节,但您可以查看 MOV 文件格式。包含 url 的原子是 DREF。苹果应该有更多信息。查看QuickTime 文件格式规范了解详细信息。
例如,这里的示例文件(来自mplayer 示例数据库,已被证明是适用于各种媒体文件的非常宝贵的资源),实际上仅包含对另一个文件的引用,托管在http://stream.qtv.apple .com/events/jan/cat_power/cat_power_ref_28.mov。服务器肯定能够通过这种方式确定客户端的 IP 地址。