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



我发现w3c验证器对于测试当前页面的最终标记非常有用。我的每个页面都有一个链接,如下所示:

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,我希望它在没有重定向的情况下工作,但我不知道如何实现它

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

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

  • 查看>来源
  • 复制/粘贴(可能通过文本编辑器删除任何私有数据(到Validator

更复杂的方法是编写一种绕过会话检查逻辑并始终返回管理页面的方法。(例如,查询字符串与服务器端配置检查相结合(。然后向Validator提供一个触发绕过逻辑的URL。并且只在没有生产数据的临时服务器上打开该代码(通过所述配置检查((否则就会引入一个大的安全漏洞(。

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

如果您有一个Location:标头,带有适当的重定向状态代码,那么理想情况下您根本不会发送任何HTML。它不会被看到,是对带宽的浪费。事实上,您会发现浏览器在尝试渲染HTML之前会遵循重定向。

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

还要注意,浏览器的开发工具可以为您发出HTML验证警告。因此,如果你需要对登录页面进行测试,你可以直接在浏览器中进行检查,而无需去W3C验证器。

最新更新