我正在为我的项目使用saber / dav库,我在防止默认Windows WebDAV客户端“删除”不应删除的文件方面遇到了一些困难。 服务器部分中的实现是正常的,并且其他客户端(Finder,CyberDuck)显然会抛出并确认禁止状态,该客户端会向用户发出禁止错误的中止删除过程。 Windows客户端会返回相同的状态,但它似乎只是“删除”仍在服务器端可用的文件。通过刷新文件夹,这些文件再次可见。似乎Win客户端只是忽略禁止的响应并虚拟删除文件夹,因此它不再可见。
更大的问题是,如果由于某种原因你决定删除一个文件夹,其下面有受保护和不受保护的文件/文件夹,它会删除所有未受保护的文件/文件夹,因为它无法确认第一个(或任何)被禁止的响应。其他WebDAV客户端检测到此并停止删除过程,因此指定的文件夹及其子文件夹/文件不受影响。
尝试删除文件夹或文件时禁止响应的示例:
HTTP/1.1 403 Forbidden
Server: nginx/1.8.0
Date: Wed, 29 Jul 2015 13:55:11 GMT
Content-Type: application/xml; charset=utf-8
Connection: keep-alive
X-Frame-Options: SAMEORIGIN
X-Powered-By: PHP/5.4.41-1~dotdeb+7.1
X-Sabre-Version: 2.1.3
Vary: Accept-Encoding,User-Agent
Content-Length: 320
<?xml version="1.0" encoding="utf-8"?>
<d:error xmlns:d="DAV:" xmlns:s="http://sabredav.org/ns">
<s:sabredav-version>2.1.3</s:sabredav-version>
<s:exception>Sabre\DAV\Exception\Forbidden</s:exception>
<s:message>Permission denied to delete node</s:message>
</d:error>
在Win8.1 x86上测试了默认的Win客户端。
知道如何强制Win WebDav客户端检测Forbidden响应并终止删除过程吗?
感谢。
答案 0 :(得分:0)
正如 Evert 提到的,我认为你可以通过属性绕过这个问题:https://docs.microsoft.com/en-us/openspecs/sharepoint_protocols/ms-wdvme/f83d826b-7fad-4f80-838c-5c7cc98cb59f
此处描述:How to make file READ ONLY when exposed through WebDAV
编辑:它的工作原理是您可以在文件上设置只读标志,但这不会阻止 Windows 资源管理器发送删除请求并忽略 403 状态代码。 Windows 资源管理器似乎只是一个糟糕的 webdav 客户端....