.htaccess 可以在未找到的消息中插入文本

jtw3ybtb  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(112)

可以在未找到的消息中插入文本,以欺骗用户访问网站或执行攻击者可能感兴趣的操作。
它在未找到的消息正文中返回用户输入。这可能以多种方式被滥用。
1.攻击者注入文本可以将用户重定向到恶意站点。
1.攻击者插入文本可能会向用户提示错误消息。
概念验证:

https://drupal7.example/.htcaccess/***Attention!***%2f../Site%20has%20been%20replace%20by%20a%20new%20one%20https://www.google.com%20so%20go%20to%20the%20new%20one%20since%20this%20one

字符串
在其他一些情况下,比如

https://drupal7.example/htaccess // without dot for example


一切都很好

# Make Drupal handle any 404 errors.                                                                                                               
ErrorDocument 404 /index.php


在.htaccess文件中,Drupal处理所有404错误。
有没有办法解决这个问题,让Drupal处理所有404错误,包括示例中的错误?

myzjeezk

myzjeezk1#

此行为是由于URL中存在%2F(编码斜杠/)。
Apache使用AllowEncodedSlashes指令来确定是否允许通过URL中的编码路径分隔符。默认值是Off,在这种情况下,当URL中有%2f时,获得Apache 404而不是Drupal 404是“正常”的:
AllowEncodedSlashes指令允许在路径信息中使用包含编码路径分隔符的URL(在一致系统上,%2F表示/,另外%5C表示\)。

  • 关闭:此类URL将被拒绝,并显示404(未找到)错误。
  • 开:接受这样的URL,编码的斜杠像所有其他编码字符一样被解码。
  • NoDecode:接受这样的URL,但编码的斜杠不被解码,而是保持其编码状态。

默认值是Off,因为让Apache盲目地解码路径分隔符会使您的机器受到目录遍历攻击(参见CVE-2007-0450),将此指令设置为On并不安全。
幸运的是,NoDecode选项(从版本2.3.12开始可用)允许接受这样的URL而不暴露您的服务器,因此要解决这个问题并让Drupal在404或其他任何情况下处理此类请求,只需在 httpd.conf 中添加指令:

AllowEncodedSlashes NoDecode

字符串

注意:虚拟主机不会从全局上下文中继承该指令,需要在虚拟主机容器中将该指令重置为所需值,否则将采用默认值。

现在,如果你仍然得到一个服务器404而不是一个drupal 404,那可能是因为指令ErrorDocument 404没有被考虑在内,或者在某处被覆盖了。
检查这个指令是否实际加载的一个快速方法就是设置一个静态内容(顺便说一下,在这个例子中没有输入显示问题;)的人:

ErrorDocument 404 "Page not found"


也许Apache的正确行为应该是将这种类型的url作为403捕获,并让drupal处理它,您可以设置ErrorDocument 403 /index.php
同样值得注意的是,通用的drupal 404“page not found”页面可以很容易地在admin/config/system/site-information上被覆盖,以及403“access denied”页面。

相关问题