有没有一种方法可以将URL调用嵌入到图像或电影文件的原始数据中,以便在打开图像或电影时可以调用Web服务器?我希望能够通过向某人​​发送图像,然后让该图像回拨到我控制的Web服务器来获取某人的外部IP。

我只是想知道是否可以嵌入一些PHP脚本进入图像文件。

#1 楼

任何此类功能都取决于所使用的播放器或查看器。我知道没有一种图像格式需要查看器进行任何形式的交互,但是某些视频格式确实使用(或更确切地说确实使用了)。

除了0xea提到的Quicktime,Windows Media / ASF格式允许嵌入脚本命令,其中之一是打开URL:

http://support.microsoft.com/kb/828026



内容所有者创建音频或视频流时,该内容所有者可以添加嵌入在流中的脚本命令(例如URL脚本命令和自定义
脚本命令)。播放流时,脚本命令可以在嵌入式播放器程序中触发事件,也可以启动Web浏览器,然后连接到特定的网页。此行为是设计使然。


但是,此行为:


依靠支持它的播放器(例如,我不认为VLC或mplayer支持)
可以被用户禁用

所以,我不会依赖它。

EDIT

图片,我刚刚意识到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>

它是针对特定观看者的,但是您可能有更多的机会来使用它。

#2 楼

您要求的是非常接近远程执行代码,这通常是安全性。
有些格式允许类似的内容。

据我所知,MOV文件格式允许您在其中插入URL或别名以用于电影的其他版本。我认为它通常用于流媒体目的,以便播放器可以请求更高或更低质量的电影和类似内容。

我不知道很多细节,但是您可以签出MOV文件格式。包含网址的原子是DREF。苹果应该有更多信息。请查看QuickTime文件格式规范以获取详细信息。例如,这里的示例文件(来自mplayer示例数据库,事实证明对所有媒体文件来说都是非常宝贵的资源),实际上仅包含对另一个文件的引用,该文件位于http://stream.qtv.apple.com/events/jan/cat_power/cat_power_ref_28.mov。服务器肯定可以通过这种方式确定客户端的IP地址。