【发布时间】:2014-11-29 10:56:47
【问题描述】:
我正在尝试创建一个 PHP 网页,让访问者可以看到来自网络摄像头的 视频流 或 图像 不允许访问者获取它的原始 URL/URI。 换句话说,我有一个在给定地址运行的网络摄像机:端口,我可以看到嵌入在 HTML 正文中的流,如下所示:
<img src="http://5.246.77.89:8080/videostream.cgi?user=myusername&pwd=mypass&resolution=32&rate=15" alt="">
或者如果我们想要静态图像:
<img src="http://5.246.77.89:8080/snapshot.cgi?user=myusername&pwd=mypass&" alt="">
现在的问题是,如果有人查看页面后面的 HTML 代码,显然会看到摄像头的 URL 及其用户/密码凭据。这允许访问者随时连接到相机,即使无需访问托管此服务的页面,他们只需在任何浏览器中输入 URL
http://myip:myport/videostream.cgi?user=admin&pwd=fewf2d53BVH&resolution=32&rate=15
我不希望用户能够这样做。所以我有了一个想法:如果我能够将流包装到一个充当“中间人”的 php 网页中,我可以在不让访问者知道原始来源的情况下向访问者提供视频。原始 IP:PORT 仅在我的服务器上可见。显然,他们将始终能够使用我网页的 URL,但他们永远不会看到相机的用户/密码,我可以随时锁定服务。 此外,为了提高安全性,我可以将托管网络摄像头的路由器设置为仅接受来自我的网络服务器的连接。这将对试图直接连接到 webcabm 的恶意用户起到隐蔽作用。 我可以在服务器端做什么来获得这种行为?
【问题讨论】:
-
只要您需要通过 GET 参数发送您的登录数据,就没有什么可以做的,因为它本质上是开放给每个人看的。我首先想到的是制作一个生成和输出图像的 php 页面(例如,使用 GD。更多信息在这里:php.net/manual/en/ref.image.php)然后执行类似 之类的操作。但是这个解决方案似乎有点......无论如何对我来说都是残废的。我认为检查 cgi 以确定是否可以通过其他方式传递登录凭据是个好主意。
-
@SamBraslavskiy 感谢您的反馈。然而,让我强调一下,问题不在于 HTTP 传输的安全性,因为 GET 的性质是不可能的。我不想那样。我只是想让用户在我决定这样做之后无法继续观看视频。我的想法是将视频嵌入到让您无需提供用户名和密码即可观看视频的内容中,这将使任何暴力破解尝试无效。
-
能否请您指定是否只需要来自相机、视频或两者的图像?
-
@SamBraslavskiy 我愿意有两个单独的脚本,一个用于视频,一个用于图片。然而,它们呈现给主机的方式始终相同 页面之间的唯一变化将是源 CGI:videostream.cgi 用于视频,snapshot.cgi 用于图片。我想解决方案只是将页面从原始 URL 接收到的相同数据流出来。
-
更新:PHP 函数 passthru 似乎很有希望......
标签: html image video embed man-in-the-middle