可以在未找到的消息中插入文本,以欺骗用户访问网站或执行攻击者可能感兴趣的操作。
它在未找到的消息正文中返回用户输入。这可能以多种方式被滥用。
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错误,包括示例中的错误?
1条答案
按热度按时间myzjeezk1#
此行为是由于URL中存在
%2F
(编码斜杠/
)。Apache使用
AllowEncodedSlashes
指令来确定是否允许通过URL中的编码路径分隔符。默认值是Off
,在这种情况下,当URL中有%2f
时,获得Apache 404而不是Drupal 404是“正常”的:AllowEncodedSlashes指令允许在路径信息中使用包含编码路径分隔符的URL(在一致系统上,%2F表示/,另外%5C表示\)。
默认值是
Off
,因为让Apache盲目地解码路径分隔符会使您的机器受到目录遍历攻击(参见CVE-2007-0450),将此指令设置为On
并不安全。幸运的是,
NoDecode
选项(从版本2.3.12开始可用)允许接受这样的URL而不暴露您的服务器,因此要解决这个问题并让Drupal在404或其他任何情况下处理此类请求,只需在 httpd.conf 中添加指令:字符串
注意:虚拟主机不会从全局上下文中继承该指令,需要在虚拟主机容器中将该指令重置为所需值,否则将采用默认值。
现在,如果你仍然得到一个服务器404而不是一个drupal 404,那可能是因为指令
ErrorDocument 404
没有被考虑在内,或者在某处被覆盖了。检查这个指令是否实际加载的一个快速方法就是设置一个静态内容(顺便说一下,在这个例子中没有输入显示问题;)的人:
型
也许Apache的正确行为应该是将这种类型的url作为403捕获,并让drupal处理它,您可以设置
ErrorDocument 403 /index.php
。同样值得注意的是,通用的drupal 404“page not found”页面可以很容易地在
admin/config/system/site-information
上被覆盖,以及403“access denied”页面。