- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将几个大型站点从 ColdFusion、MS SQL 和 IIS 迁移到 Railo、MySQL 和 Tomcat 7。设置还不错,但有很多旧代码,我将在不区分大小写的情况下重写始终考虑在内。
虽然我不确定为什么区分大小写是一种安全威胁(来自 MS 世界,这从来都不是问题)但我需要找到一种方法让 Tomcat 7 和 Railo 找到 img/employee/greg .jpg
当它位于 img/Employee/greg.jpg
文件夹中时。 employee 中的 E
导致一半的调用失败。
两个问题:
我怎样才能让它不区分大小写,为什么区分大小写会带来安全风险?
最佳答案
好的,那么第二个问题:
区分大小写本身并不是安全风险。根据其他答案中的评论,问题似乎是它可能绕过具有特定名称/大小写的目录的安全约束,特别是 WEB-INF
,(可能包含敏感代码或配置文件)。
如果您尝试访问 domain.com/WEB-INF Tomcat 将阻止它,同时它会将 domain.com/Web-Inf 视为不同的,并且可能不会阻止它(我还没有真正测试过这是否是案)。
然而,这并不是真正的问题,因为 Railo 不要求您在 webroot 中拥有 WEB-INF 目录 - 您可以 configure Railo to point to a different location如果它在 webroot 之外,那么问题就被解决了。
(免责声明:这是基于可用信息;可能不止于此,但您有责任对任何可公开访问的网站执行安全扫描/渗透测试。)
这里有很多选项...
虽然这同样适用于 Jetty 和 Tomcat,但 Jetty 的 aliases
选项(在 {jetty}/etc/webdefault.xml
中)并未被弃用(就像 Tomcat 的区分大小写一样开关是),在简短的测试中,它似乎可以阻止对 web-inf
的所有大小写变体的访问。
很可能还有其他 servlet 引擎具有可接受的类似选项(例如 Resin
虽然您可以使用 Tomcat 的 Coyote 网络服务器,但您并不是必须这样做,并且将(例如)Apache httpd、Nginx 或 IIS7 放在前面可以为您提供更大的灵 active - 特别是它允许你让静态资源不区分大小写。
我这样说是因为你给出的例子是一个图像文件,所以它不需要转到 servlet 引擎或 Railo - 如果它只是静态文件是问题(如果所有请求都通过 index.html 是完全可能的)。 cfm) 然后简单地将 Web 服务器配置为不区分大小写是解决此问题的简单方法,无需考虑 Tomcat/Railo。
例如,在记录 404 错误时抓取您的网站 - 这将为您提供大小写不匹配的列表。
一旦你有了这个,创建一个简单的脚本来将所有这些文件重命名为小写,并生成一系列重写规则,以便将请求的文件重定向到小写变体。
例如使用 mod_rewrite 语法:
# If file exists, don't rewrite it (and stop processing further rules)
RewriteCond ${REQUEST_URI} !f
RewriteRule .* - [L]
# Requested file doesn't exist, so redirect to lowercase version
RewriteRule (?i)img/employee/greg.jpg img/employee/greg.jpg [L,R=301]
RewriteRule (?i)img/employee/bert.jpg img/employee/bert.jpg [L,R=301]
RewriteRule (?i)whatever.else whatever.else [L,R=301]
第一条规则确保不会不必要地检查存在的文件(L 标志表示停止寻找进一步的重定向),而 (?i) 将执行不区分大小写的匹配并执行 301 重定向到正确的文件.
这解决了眼前的问题,随着时间的推移,您可以逐渐更新代码以使用一致的大小写,直到不再需要重定向为止。
重写语法根据您用于 Web 服务器的内容而有所不同 - 所有这些都有选项,但有些比其他的更成熟/集成。
关于Tomcat 和 Railo 迁移需要不区分大小写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12539116/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
出于某种原因,右栏中的精选文章忽略了“#elementtext”和“#elementtext:hover”属性。仅显示“p.element”和“img.element”。 有什么想法吗? 谢谢 - 塔
我有两个值,每个值都来自不同的枚举。我想检查这两者的允许组合,如果没有找到则执行默认操作。我能以某种方式对这两个值进行切换/大小写吗?我想避免使用多个 if/else 语句或遵循位掩码模式的枚举,只是
我需要 where 但 not 大小写。例如,我想找到没有名字“莎士比亚”的戏剧: _.where(listOfPlays, {author: !"Shakespeare", year: 1611})
我想实现一个 parking 场应用所以有一个带5个或更多 parking 位的车库当司机 parking 时,车库中的下一个空闲位置应该分配给他。 所以我有一个带 5 个或更多插槽的 table 上
我想使用 Erlang 来确定传递给函数的变量是否可以被数字整除。我考虑过使用 case 来执行此操作,但是我找不到解决方案。 case 是适合这项工作的工具吗? 示例:将数字传递给函数 f()。如果
我在 phpmyadmin 中创建了一个表,其列名如 first_name、last_name。当我使用命令显示表中的列名时,它会将它们显示为 first_name。 我想显示我的列名称,如 Firs
使用 Swift 4,如何使用这些规则格式化字符串: 如果单词超过 3 个字母,则首字母大写,否则大写 包含像 St-Michel 这样的连字符的 Pascal 大小写单词 我这里有初稿,但我一直在思
这个问题在这里已经有了答案: Why can't the switch statement be applied to strings? (23 个回答) 关闭 8 年前。 大家好 所以我正在尝试对
在 MVC 操作中,我如何访问使用多个同名值提交的“表单数据”中的值? 我做了什么:int、decimal、string 类型的值工作完美。 问题:每个变体都有一个复选框,所以当我尝试获取它时,它只显
while(1) { char buff[1000]; printf("Enter the word: "); fgets(buff, 1000
我有一个 Dllmain,它在线程附加到此 DLL 时分配线程本地存储。代码如下: BOOL APIENTRY DllMain(HMODULE hModule,
我有一个变量名,比如“WARD_VS_VITAL_SIGNS”,我想将它转换为 Pascal 大小写格式:“WardVsVitalSigns” WARD_VS_VITAL_SIGNS -> WardV
我是 Swift 编码的新手,正在尝试弄清楚如何在触摸节点时制作具有开/关功能的循环音频。我认为实现它的最佳方式是通过 SKAudioNode,但我不确定我在以下代码中做错了什么。当在节点上按下时 -
这是我第一次使用这种枚举,具有关联值类型的枚举,我需要根据对象的类型制作一个 switch 语句,我无法做到,这是枚举: enum TypeEnum { case foo(FooClass)
我想从字符串中删除所有下划线,下划线后面的字符为大写。因此,例如:_my_string_ 变为:MyString 同样:my_string 变为 MyString 有没有更简单的方法呢?我目前有以下内
如何在 Java 中将蛇形大小写转换为 Camel 形大小写? 输入:“input_in_snake_case” 输出:“InputInSnakeCase” 最佳答案 Guava通过其CaseForm
我们有一个表auth_group_access,那么如何使用呢? 在使用M方法时,对于带下划线的表名,可以采用如下方法。 M('AuthGroupAccess'); 对应sql语句SQL: S
我正在制作一个 pygame 游戏,每当我运行我的代码时,我都会收到错误 expected ':'。我知道在 match/case block 中使用 [ 和 ] 用于其他用途,但我该如何解决这个问题
有人能告诉我是否可以使用正则表达式将 url 转换为小写? 这是在 html img 标签内,所以我们可以通过标签找到网址。 这是我所拥有的一个例子 我需要在最后小写图像名称。 该文档包含更多 H
我是一名优秀的程序员,十分优秀!