如何通过 url 检查避免 w3c 标记验证以使用服务器重定向

how to avoid w3c markup validation to use server redirection via url checking

我发现 w3c validator 对我测试当前页面的最终标记非常有用。我的每个页面都有一个 link,像这样:

https://validator.w3.org/nu/?showsource=yes&doc=https%3A%2F%2Fexample.com%2Findex.php

它有效,但问题是,如果我有这样的东西:

<?php
if(!isset($_SESSION['admin'])){header('location: login.php');}
?>

测试的最终标记实际上是 login.php 的标记而不是 index.php - 无论会话是否设置 - 或未设置

有没有办法避免这种重定向?

似乎有一个 POST 选项而不是 GET,我希望它可以在没有重定向的情况下工作,但我不明白如何实现它

如果您有一个 Location: header,具有适当的重定向状态代码,理想情况下您根本不会发送任何 HTML。它不会被看到并且是对带宽的浪费。事实上,您会发现浏览器会在尝试呈现 HTML.

之前遵循重定向

因此,应该没有什么可以验证的!

另请注意,您浏览器的开发人员工具可以为您发出 HTML 验证警告。因此,如果您需要对 logged-in 页面进行测试,您可以直接在浏览器中进行检查,而无需前往 W3C 验证程序。

永远不会设置会话,因为验证器不会登录到您的站点。

验证您的 HTML 的简单 安全 方法是:

  • 查看 > 来源
  • Copy/Paste(可能通过文本编辑器删除任何私有数据)进入验证器

更复杂的方法是编写一种绕过会话检查逻辑并始终return管理页面的方法。 (例如,查询字符串与服务器端配置检查相结合)。然后给出一个 URL 触发绕过验证器的逻辑。并且只在没有生产数据的登台服务器上打开该代码(通过所述配置检查)(否则你已经引入了一个大的安全漏洞)。

另一种类似的方法是根据请求来自的 IP 地址进行绕过,然后允许访问验证器的 IP 地址。由于您不希望攻击者能够通过将他们的 URL 提交给验证器来读取您的管理页面,因此您应该只对安装在您的 LAN 上的验证器实例的 IP 地址执行此操作(并且受到限制有权访问您的 LAN 的非管理员无法使用它。