如何从网页远程桌面连接(RDP)

8

我正在尝试从我的网页打开到服务器的rdp会话。

<td><a href="file:///c:/Users/stegar06/Desktop/wtf.bat">testrdp</a></td>

.bat文件中只有以下一行代码: mstsc /v:emea-cirrus
问题在于,该文件在我的Chrome浏览器中仅作为文本文件显示。因此,网页只是加载并在顶部直接显示“mstsc /v:emea-cirrus”。我该如何让它启动远程桌面客户端并转到所需地址?
我还尝试创建.rdp文件,并将其引用为href,但它也只显示为纯文本。RDP文件是使用以下代码创建的:
screen mode id:i:2
desktopwidth:i:1436
desktopheight:i:925
session bpp:i:16
auto connect:i:1
full address:s:emea-orion
compression:i:1
keyboardhook:i:2
audiomode:i:2
redirectdrives:i:0
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:0
displayconnectionbar:i:1
alternate shell:s:
shell working directory:s:
disable wallpaper:i:1
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:1
bitmapcachepersistenable:i:1
winposstr:s:0,3,0,0,800,600
redirectclipboard:i:1
redirectposdevices:i:0
drivestoredirect:s:
autoreconnection enabled:i:1
authentication level:i:0
prompt for credentials:i:0
negotiate security layer:i:1
remoteapplicationmode:i:0
allow desktop composition:i:0
allow font smoothing:i:0
disable cursor setting:i:0
gatewayhostname:s:
gatewayusagemethod:i:0
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0

浏览器被沙盒化以避免您所期望的这种行为。通常情况下,您不希望访问某个随机页面会调用您计算机上的某个可执行文件,可能对其造成不知道什么样的损害。如果像这样的事情可以实现,那么必须通过一些安全覆盖来完成。即使如此,我认为在没有预防措施的情况下也不建议这样做。假设 wtf.bat 被覆盖了,替换后的批处理文件能做些什么对业务来说都不是好事情。 - JayC
我曾经看到通过ActiveX控件(仅限IE)访问虚拟机,并听说过使用HTML5 Canvas和WebSockets的VNC,...如果您想要类似于RDP的访问权限,我想您仍然有选择。但是,否则,在本地访问可执行文件或批处理文件将需要在您选择的某个浏览器中打开安全漏洞。 - JayC
1
三个单词:<a href="/bin/rm+-rf+/"/> - tripleee
3个回答

16

您可以在服务器端创建.RDP文件,Windows应该将其与远程桌面关联,并强制浏览器下载它(而不是显示它)。在PHP中,您可以像这样操作:

$file = 'screen mode id:i:2
desktopwidth:i:1436
desktopheight:i:925
session bpp:i:16
auto connect:i:1
full address:s:emea-orion
compression:i:1
keyboardhook:i:2
audiomode:i:2
redirectdrives:i:0
redirectprinters:i:0
redirectcomports:i:0
redirectsmartcards:i:0
displayconnectionbar:i:1
alternate shell:s:
shell working directory:s:
disable wallpaper:i:1
disable full window drag:i:1
disable menu anims:i:1
disable themes:i:1
bitmapcachepersistenable:i:1
winposstr:s:0,3,0,0,800,600
redirectclipboard:i:1
redirectposdevices:i:0
drivestoredirect:s:
autoreconnection enabled:i:1
authentication level:i:0
prompt for credentials:i:0
negotiate security layer:i:1
remoteapplicationmode:i:0
allow desktop composition:i:0
allow font smoothing:i:0
disable cursor setting:i:0
gatewayhostname:s:
gatewayusagemethod:i:0
gatewaycredentialssource:i:4
gatewayprofileusagemethod:i:0';

header("Content-Disposition: attachment; filename=filename.rdp");
header("Content-Type: application/rdp");
print $file;
exit();

我以前用过这个技术,效果不错。用户会点击链接,然后被提示保存或打开,如果他们点击打开,远程桌面将使用指定的设置启动。


特别针对.NET和ASP.MVC的示例

public FileResult RDP() {
    MemoryStream memoryStream = new MemoryStream();
    TextWriter tw = new StreamWriter(memoryStream);
    tw.WriteLine("screen mode id:i:2");
    tw.WriteLine("use multimon:i:0");
    ///The rest of the file
    memoryStream.Position = 0;
    return File(memoryStream, "application/rdp", "conenction.rdp");
}

4
希望你不介意,我为.NET添加了一个示例 - 我这样做了,效果很好。一个提示是使用RDP,进行所有设置,然后在常规选项卡上单击选项和“另存为”。复制所有设置。这非常方便,因为您可以根据数据库中的URL即时创建RDP文件。此外,这应该就是答案了! - Piotr Kula
非常好的答案,谢谢。是否有一种方法可以在启动后删除文件,以避免下载区域混乱? - Federer
@Federer 不行,因为文件已经下载到用户的计算机上,超出了浏览器的权限范围。 - dearsina
@Federer,如果你点击“打开”而不是“保存”,一些浏览器会自动删除文件。 - Cullub

2
我可以建议使用基于浏览器的RDP客户端吗?现在你有开源选择,如Guacamole FreeRDP-WebConnect(如果你有Linux服务器)或Myrtille(适用于Windows)。还有一些商业软件,具有更多功能(取决于你的需求),如2X RDP客户端或LogMeIn。

1

出于安全原因,您不能仅通过现代浏览器的链接运行批处理文件。

如果您将批处理文件的调用封装在VBScript中并通过shell运行它,那么您可以让它工作。但是,您需要打开ActiveX权限以允许IE执行此操作。

有关如何执行此操作的示例,请参见此处


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接