- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
精简版
在下面的代码中,$1
被污染了,我不明白为什么。
长版
我在运行 Foswiki在带有 -T
的 perl v5.14.2 系统上启用污点检查模式。
调试该设置的问题,我设法构建了以下 SSCCE。 (请注意,我编辑了这篇文章,第一个版本更长更复杂,评论仍然引用。)
#!/usr/bin/perl -T
use strict;
use warnings;
use locale;
use Scalar::Util qw(tainted);
my $var = "foo.bar_baz";
$var =~ m/^(.*)[._](.*?)$/;
print(tainted($1) ? "tainted\n" : "untainted\n");
$var
未受污染且正则表达式固定,生成的捕获组
$1
被污染了。我觉得这很奇怪。
Values may be untainted by using them as keys in a hash; otherwise the only way to bypass the tainting mechanism is by referencing subpatterns from a regular expression match. Perl presumes that if you reference a substring using
$1
,$2
, etc., that you knew what you were doing when you wrote the pattern.
when use locale is in effect, Perl uses the tainting mechanism (see perlsec) to mark string results that become locale-dependent, and which may be untrustworthy in consequence. Here is a summary of the tainting behavior of operators and functions that may be affected by the locale:
Comparison operators (
lt
,le
,ge
,gt
andcmp
) […]Case-mapping interpolation (with
\l
,\L
,\u
or\U
) […]Matching operator (
m//
):Scalar true/false result never tainted.
Subpatterns, either delivered as a list-context result or as
$1
etc. are tainted if use locale (but notuse locale
) is in effect, and the subpattern regular expression contains
':not_characters'\w
(to match an alphanumeric character),\W
(non-alphanumeric character),\s
(whitespace character), or\S
(non whitespace character). The matched-pattern variable,$&
,$`
(pre-match),
$'
(post-match), and$+
(last match) are also tainted if use locale is in effect and the regular expression contains\w
,\W
,\s
, or\S
.Substitution operator (
s///
) […][⋮]
\w
,
\W
,
\s
或
\S
,所以它不应该依赖于语言环境。
$1
?
最佳答案
目前问题中引用的文档与 perl 5.18.1 的实际实现之间存在差异。问题是字符类。文档提到 \w
, \s
, \W
, \S
听起来像是一个详尽的列表,而几乎每次使用 […]
的实现都会受到影响。 .
正确的解决方案可能介于两者之间:像 [[:word:]]
这样的字符类应该污染,因为它取决于语言环境。我的固定列表不应该。字符范围如 [a-z]
取决于整理,所以在我个人看来,它们也应该被污染。 \d
取决于语言环境对数字的看法,因此它也应该受到污染,即使它既不是目前提到的转义序列之一,也不是括号内的类。
所以在我看来,文档和实现都需要修复。 Perl 开发人员正在致力于此。进度信息请看the perl bug report我报了案。
对于固定的字符列表,一个可行的解决方法似乎是将表达式作为析取,即 (?:\.|_)
而不是 [._]
.它更冗长,但即使使用当前(在我看来有缺陷的)perl 版本也应该可以工作。
关于regex - 通过正则表达式进行 Perl 污染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20355879/
我正在尝试将我的插件提交到 mozilla 站点,但我收到了这个该死的警告: 代码(在 mf_options.js 中)非常简单(我认为问题只存在于“开始存储”和“结束存储”之间: // start
精简版 在下面的代码中,$1被污染了,我不明白为什么。 长版 我在运行 Foswiki在带有 -T 的 perl v5.14.2 系统上启用污点检查模式。 调试该设置的问题,我设法构建了以下 SSCC
我有一个 Controller ,其中 $scope 对象已用于存储仅在同一 Controller 中本地使用的方法和值。有很多这样的事情发生: $scope.foo = 'something'; $
我知道将不受信任的对象标记为受污染的可能性,但根本目的是什么,我为什么要这样做? 最佳答案 将污点作为一种安全预防措施进行跟踪,以确保不受信任的数据不会被错误地用于计算、交易或解释为代码。 通过内置语
我正在开始一个新的 react 项目,我刚刚安装了非常基本的包(npx create-react-app),没有任何其他东西。当我运行审核时,我得到以下低漏洞:
我知道关于这个特定主题有很多,但是我找不到任何偶然发现我的问题的人,希望有人可以向我解释这一点。 我有一个域,我在 equals 方法中使用注入(inject)的 grailsApplication
我在程序中使用许多不同的记录,其中一些使用相同的字段名称,例如 data Customer = Customer { ..., foo :: Int, ... } data Product = Pro
我有一个包含 2 个节点组的集群:实时和常规。我只希望能够实时容忍亲和性的 Pod 能够在来自实时集群的节点上运行。 我的方法是污染相关节点并向我要注册到该节点的 pod 添加容忍度。当我试图污染一个
在其中一个回复中,BalusC 已经提到了 初学者的一个常见错误是,他们将 servletcontainer/appserver 的库复制到/WEB-INF/lib 中,因为他们在 IDE 中遇到编译
最近我偶然发现了一个vulnerability in doT.js 。该漏洞的存在是因为攻击者可以利用原型(prototype)污染来修改传入 doT 的选项值。 示例: var doT = requ
我有一个带有多个命名空间的仅 header C++ 库。 例如一个头文件可能包含 //header1.h namespace library{ namespace componentA{ tem
我正在尝试将 svg 转换为图像并提示用户下载。 var chart = $(svg.node()) .attr('xmlns', 'http://www.w3.org/200
在 javascript 中,可以“覆盖”Object.prototype 的属性或方法。例如: Object.prototype.toString = function(){ return "s
当我们要写入一个数据项时,首先将包含数据的块带入缓存,然后将数据项写入缓存。这可能会导致缓存污染。为了避免这种情况,英特尔没有引入临时指令。 如果我要使用 mmap() 将数据写入文件并且永远不会再次
我可以感染一个节点,但不能感染一个实例组。 kubectl taint nodes nodeA kops.k8s.io/instancegroup=loadbalancer:NoSchedule 下面
我的应用程序显示存储在 中的图像AWS S3 (出于安全原因,在私有(private)存储桶中)。 为了让用户从他们的浏览器中看到图像,我生成了 签名 URL 喜欢 https://s3.eu-cen
总结 对于我的 CS 顶点项目,我们遇到了一个类名存在于两个不同依赖项中的问题。具体来说,我们使用一个依赖项将 MySQL 与 Entity Frame 一起使用,一个用于直接连接和执行 MySQL
我在 VS 2005 中有一个 VC++ 项目,我制作了 32 位和 64 位版本。我刚刚安装了 VS 2010 并试图将项目移植到较新的 Visual Studio。它不会移植,因为该项目引用了平台
我正在使用 Struts 2 v 2.3.16.3 和 tomcat 6。 用户将单击一个通过 id 查找对象的操作,页面将显示它。我遇到了一个零星的错误,用户会突然从另一台机器上的另一个用户那里得到
这个问题已经有答案了: Tainted Canvas, due to CORS and SVG? (2 个回答) 已关闭 4 年前。 我在 Angular JS 中有一个指令,允许将 SVG 导出为
我是一名优秀的程序员,十分优秀!