我正在经历使用 eval() 对于基于 XSS 的攻击的不良影响。我需要保护一段代码免受可能的 XSS 攻击,我猜 JSON.parse() 应该可以正常工作。
var request = new XMLHttpRequest();
var url = encDataPath + "/jcr:content/metadata.json?_charset_=utf-8";
url = Granite.HTTP.externalize(url);
request.open("GET", url ,false);
request.send(null);
var jsonData =eval("(" + request.responseText + ")"); // <-- here
var assetTitle = jsonData["dc:title"];
var mimetype = jsonData["dc:format"];
Run Code Online (Sandbox Code Playgroud)
有人可以建议我如何将eval()(jsonData)更改为JSON.parse?
我正在执行一系列命令curl:
它是这样的:
# -----> step 1 <-----
URL="https://web.example.com:8444/hello.html"
CMD="curl \
--insecure \
--dump-header - \
\"$URL\""
echo $CMD && eval $CMD
OUT="<result of the curl command???>"
# Set-Cookie: JSESSIONID=5D5B29689EFE6987B6B17630E1F228AD; Path=/; Secure; HttpOnly
JSESSIONID=$(echo $OUT | grep JSESSIONID | awk '{ s = ""; for (i = 2; i <= NF; i++) s = s $i " "; print s }' | xargs)
# Location: https://web.example.com:8444/oauth2/authorization/openam
URL=$(echo $OUT | grep Location | awk '{print …Run Code Online (Sandbox Code Playgroud) 我正在编写一个基于 CircleCI orb 源代码的 bash 脚本,我很困惑为什么 bash 脚本中的环境变量子集会被设置为eval echo它们自己。
例如,这条线的目的是什么?
ORB_EVAL_REPO=$(eval echo "${ORB_EVAL_REPO}")
Run Code Online (Sandbox Code Playgroud)
这是源代码:
https://circleci.com/developer/orbs/orb/circleci/aws-ecr#orb-source
作为一个完整的示例,第 705-709 行设置了五个环境变量,但eval echo在第 691-692 行仅使用其中两个变量进行设置,即使这些变量在第 699-702 行以相同的方式使用:
command: |
#!/bin/bash
ORB_EVAL_REGION=$(eval echo "${ORB_EVAL_REGION}") # line 691
ORB_EVAL_REPO=$(eval echo "${ORB_EVAL_REPO}")
if [ "$ORB_VAL_PUBLIC_REGISTRY" == "1" ]; then
echo "set-repository-policy is not supported on public repos"
exit 1
else
aws ecr set-repository-policy \
--profile "${ORB_VAL_PROFILE_NAME}" \ # line 699
--region "${ORB_EVAL_REGION}" \
--repository-name "${ORB_EVAL_REPO}" \
--policy-text "file://${ORB_VAL_REPO_POLICY_PATH}"
fi
environment:
ORB_EVAL_REGION: <<parameters.region>> # …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 eval 设置多行变量
$ k="A
B
C"
$ echo "$k"
A
B
C
$ eval 'k="1
2
3"'
$ echo "$k"
1
2
3
Run Code Online (Sandbox Code Playgroud)
但我想使用 awk 通过 awk 脚本生成我的变量
$ echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'
awkV="1
2
3"
$ eval `echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`
$ echo "$awkV"
1 2 3
$ eval '`echo "$k" | awk 'BEGIN{RS="";FS="[ \t]+"}{print "awkV=\""$0"\""}'`'
-bash: unexpected EOF while looking for matching ``'
-bash: syntax error: unexpected end of file
bash: …Run Code Online (Sandbox Code Playgroud) 是否可以在数据库中保存一些Perl代码然后使用select语句检索它然后执行该Perl代码?我尝试过使用eval,但这似乎不起作用.
这是我现在正在尝试的东西,它似乎不起作用:
my $temp = $qryResults[0];
print $temp."\n";
eval{"$temp"};
Run Code Online (Sandbox Code Playgroud)
输出是 $con->Disconnect();exit;
<?php
$a = "a == a";
eval($a);
Run Code Online (Sandbox Code Playgroud)
这返回false.我以为它应该回归真实.任何想法/想法为什么会这样.
我正在编写一个函数,我想提供一个变量,其中包含要在函数内部进行求值的条件.例如,我有一个小时变量,包含0,3,6,9,18,3,6,9,18,0,18等值...我想选择小时变量匹配为0,6的索引这个0,6可能会根据其他一些参数而改变.基本上它们并不总是固定的.所以我传递一个变量g1 = call("which", (hourval==0 | hourval == 6)).我希望在程序中评估此语句.因此我使用该声明x1 = eval(g1).显然,当我传递变量时g1,不会生成那个时间的小时变量,而是在eval(g1)语句之前生成它.我收到错误,hourval找不到对象.有没有其他方法可以解决这个问题.
在此先感谢,任何帮助表示赞赏.
Narayani Barve
我试图读取两个由a分隔的数字:并进行比较.
下面是一些说明我的问题的代码:
use strict;
use warnings;
my @nums = qw(1.23:2.13 0.1:2.11 1.17772e+06:1.32 2:10.2);
for my $number (@nums){
print "actual numbers $number\n";
my ($c, $e) = ($1, $2) if $number =~ /(\d+\.\d+|\d+):(\d+\.\d+|\d+)/;
print "regex matches: $c:$e\n";
}
Run Code Online (Sandbox Code Playgroud)
哪个输出:
actual numbers 1.23:2.13
regex matches: 1.23:2.13
actual numbers 0.1:2.11
regex matches: 0.1:2.11
actual numbers 1.17772e+06:1.32
regex matches: 06:1.32 # not capturing 1.17772e+06
actual numbers 2:10.2
regex matches: 2:10.2
Run Code Online (Sandbox Code Playgroud)
我的问题是:我怎样才能a)捕获1.17772e+06并b)将其评估为数字?
我试图基于传递变量的单个部分来检查已定义的变量.(变量的其余部分是静态的,并且它的所有其他部分都是相同的),所以我做了一个测试,以确定这是否可行.
它不起作用,但也许我正在做一些容易修复的小事.
define('TEST', 'works');
$test = 't';
echo TES . strtoupper($test);
echo eval('TES . strtoupper('.$test.');');
echo eval('TES . strtoupper(\'$test\');');
echo eval('TES' . strtoupper($test) . ';');
Run Code Online (Sandbox Code Playgroud) 我有一个带有eval()的代码段,如下所示:
var data = "{listUpdated:[],listConflictOrMerge:[]}"; //returned from Ajax
var results = eval("(" + data + ")");
console.log(results)Run Code Online (Sandbox Code Playgroud)
如您所见,数据是我从ajax请求返回的输入值.使用eval()时,可以将其解析为2个数组对象.
现在我不想再使用eval()了,所以我尝试使用JSON.parse().但是,有一个错误.
var data = "{listUpdated:[],listConflictOrMerge:[]}"; //returned from Ajax
var results = JSON.parse(data);
console.log(results)Run Code Online (Sandbox Code Playgroud)
我的目的是我不想再使用eval()来解析数据.
那么,有什么办法可以做到吗?
我尝试使用JSON,但我很不走运.我错了吗?