标签: eval

如何安全地"评估"网页中的用户代码?

我正在开发一个webapp来教授编程概念.网页上有一些关于编程概念的文本,然后让用户在javascript代码中键入文本编辑器窗口以尝试回答编程问题.当用户点击"提交"时,我会分析他们输入的文本以查看他们是否已解决问题.例如,我要求他们"编写一个命名f为其参数添加三个的函数".

以下是我正在分析用户文本的内容:

  1. 使用严格设置在文本上运行JSLint,特别是不使用浏览器或控制台功能.
  2. 如果有任何错误,请显示错误并停止.
  3. eval(usertext);
  4. 循环通过赋值的条件,eval(condition).一个例子是"f(1)===4".条件来自可靠来源.
  5. 显示通过/失败的条件.

我的问题:这是否足以防止安全问题?我还能做些什么才能成为偏执狂?有没有更好的方法来做我想要的?

如果它是相关的我的应用程序是在使用Python后端的Google App Engine上,使用JQuery,具有单独的用户帐户.

javascript security eval jslint

11
推荐指数
1
解决办法
2635
查看次数

Matlab函数处理工作区shenanigans

简而言之:是否有一种优雅的方式来限制匿名函数的范围,或者在这个例子中是否有Matlab破坏?

我有一个函数创建一个在管网解算器中使用的函数句柄.它接受一个网络状态作为输入,其中包括有关管道及其连接的信息(如果必须,还包括边和顶点),构造一个大字符串,在函数形式时将返回一个大矩阵,并"evals"该字符串以创建句柄.

function [Jv,...] = getPipeEquations(Network)
... %// some stuff happens here

Jv_str = ['[listConnected(~endNodes,:)',...
    ' .* areaPipes(~endNodes,:);\n',...
    anotherLongString,']'];

Jv_str = sprintf(Jv_str); %// This makes debugging the string easier

eval(['Jv = @(v,f,rho)', Jv_str, ';']);
Run Code Online (Sandbox Code Playgroud)

这个函数按预期工作,但每当我需要保存包含此函数句柄的后续数据结构时,它需要一个可笑的内存量(150MB) - 巧合的是在创建此函数时整个Matlab工作区(~~) 150MB).这个函数处理的变量需要来自getPipeEquations工作区并不是特别大,但是当我检查函数句柄时,更疯狂的是:

>> f = functions(Network.jacobianFun)
f = 

     function: [1x8323 char]
         type: 'anonymous'
         file: '...\pkg\+adv\+pipe\getPipeEquations.m'
    workspace: {2x1 cell}
Run Code Online (Sandbox Code Playgroud)

...工作区字段包含getPipeEquations具有的所有内容(顺便说一句,它不是整个Matlab工作区).

如果我改为将eval语句移动到子函数以试图强制范围,则句柄将更加紧凑(~1MB):

function Jv = getJacobianHandle(Jv_str,listConnected,areaPipes,endNodes,D,L,g,dz)
eval(['Jv = @(v,f,rho)', Jv_str, ';']);
Run Code Online (Sandbox Code Playgroud)

这是预期的行为吗?是否有更优雅的方式来限制此匿名函数的范围?

作为附录,当我多次运行包含此函数的模拟时,清除工作空间变得非常缓慢,这可能与Matlab处理函数及其工作空间有关,也可能与之无关.

matlab closures scope eval anonymous-function

11
推荐指数
1
解决办法
1595
查看次数

不使用eval/new函数的JavaScript模板库

使用的Google Chrome扩展程序manifest_version: 2限制使用evalnew Function.我检查的所有JavaScript模板库(mustachejs,underscorejs,jQuery模板,hoganjs等)都使用new Function.有没有相当成熟和支持不使用?

有关安全限制的信息.

javascript templates eval google-chrome-extension

11
推荐指数
2
解决办法
3282
查看次数

使用javascript eval()对输入中的简单计算是否安全?

我想允许用户在文本输入中执行简单的计算,因此键入2*5将导致10.我将使用空字符串替换除数字之外的所有内容,然后使用eval()进行计算.这看起来更容易,并且可能比手动解析更快.

经常有人说eval()是不安全的,所以我想听听在这种情况下使用它有任何危险或缺点.

function (input) {
  value = input.value.replace(/[^-\d/*+.]/g, '');
  input.value=eval(value);
}
Run Code Online (Sandbox Code Playgroud)

javascript eval

11
推荐指数
1
解决办法
606
查看次数

python 3中的输入字符串

我有字符串变量测试,在Python 2.7中这很好用.

test = raw_input("enter the test") 
print test
Run Code Online (Sandbox Code Playgroud)

但是在Python 3.3中.我用

test = input("enter the test") 
print test
Run Code Online (Sandbox Code Playgroud)

使用输入字符串test,我收到一条错误消息

Traceback(最近一次调用最后一次):

文件"/home/ananiev/PycharmProjects/PigLatin/main.py",

第5行,在test = input("输入测试")

NameError中的文件"",第1行:名称'sdas'未定义

python string eval input python-3.x

11
推荐指数
2
解决办法
10万
查看次数

这个eval条件的目的是什么?

我在这里浏览源代码:http://js-dos.com/games/doom2.exe.html并注意到一些事情:

if (typeof Module === 'undefined') 
{
    Module = eval('(function() {try { return Module || {} } catch(e) { return {} }})()');
}
Run Code Online (Sandbox Code Playgroud)
  • Module函数使用内联脚本标记定义
  • 稍后var在另一个内联标记中再次声明它,这次它检查模块是否存在.

我的问题:如果只尝试再次返回模块,那么使用自调用函数声明Module有什么意义呢?是不是已经证明它不存在?为什么不直接将Module声明为{}

javascript eval conditional-statements emscripten

11
推荐指数
1
解决办法
235
查看次数

如何在R中评估eval期间出了什么问题?

部分代码:

Rengine re = getRengine();
re.eval("library(quantmod)");
re.eval("library(PerformanceAnalytics)");
re.eval("library(tseries)");
re.eval("library(FinTS)");
re.eval("library(rugarch)");
re.eval("library(robustbase)");

re.assign("arLagNum", new double[]{1});
re.assign("maLagNum", new double[]{1});
re.assign("archLagNum", new double[]{1});
re.assign("garchLagNum", new double[]{1});

re.eval("garchSpec <- ugarchspec(variance.model = list(model=\"iGARCH\", garchOrder=c(archLagNum,garchLagNum)), mean.model = list(armaOrder=c(arLagNum,maLagNum)), distribution.model=\"std\")");

re.assign("transformedTsValueData", new double[]{getSomeDoubles()};
re.eval("estimates <- ugarchfit(spec = garchSpec, data = transformedTsValueData, solver.control = list(trace = 1))");
re.eval("estimates");
Run Code Online (Sandbox Code Playgroud)

最后一行返回null.API文档说:" 如果出现问题,eval方法返回null ".我怎么知道出了什么问题?

java eval r

11
推荐指数
1
解决办法
233
查看次数

何时使用DataFrame.eval()与pandas.eval()或python eval()

我有几十个条件(例如foo > bar),我需要在~1MM的a行上进行评估DataFrame,最简洁的写法是将这些条件存储为字符串列表并创建一个DataFrame布尔结果(每行一行)每个条件记录x一列).(评估用户输入.)

在寻求过早优化的过程中,我试图确定是否应该将这些条件写入评估范围内DataFrame(例如,df.eval("foo > bar")或者只是将其保留为python,如同eval("df.foo > df.bar")

根据增强评估性能文档:

您不应将eval()用于简单表达式或涉及小型DataFrame的表达式.事实上,对于较小的表达式/对象,eval()比普通的'Python'要快许多个数量级.一个好的经验法则是当你有一个超过10,000行的DataFrame时才使用eval().

能够使用df.eval("foo > bar")语法会很好,因为我的列表会更具可读性,但我总是找不到评估速度不慢的情况.文档显示了哪里pandas.eval()比python更快的例子eval()(符合我的经验)但没有DataFrame.eval()(因为它被列为'实验').

例如,DataFrame.eval()在一个大型的非简单表达式中仍然是一个明显的输家DataFrame:

import pandas as pd
import numpy as np
import numexpr
import timeit

someDf = pd.DataFrame({'a':np.random.uniform(size=int(1e6)), 'b':np.random.uniform(size=int(1e6))})

%timeit -n100 someDf.eval("a**b - a*b > b**a - b/a") # DataFrame.eval() on notional expression
%timeit -n100 eval("someDf['a']**someDf['b'] - someDf['a']*someDf['b'] > someDf['b']**someDf['a'] …
Run Code Online (Sandbox Code Playgroud)

python performance eval pandas

11
推荐指数
1
解决办法
3728
查看次数

利用JavaScript的eval()方法

许多开发人员认为eval()应该避免使用JavaScript的方法.从设计角度来看,这个想法很有意义.当更简单,更好的选项可用时,它通常被用作丑陋的解决方法.

但是,我不了解安全漏洞的担忧.当然,运行eval()使黑客能够运行您可以运行的任何JavaScript代码.

但他们不能这样做吗?至少在Chrome中,开发人员工具允许最终用户运行自己的JavaScript.如何eval()比开发人员工具更危险?

javascript security eval client-side code-injection

10
推荐指数
2
解决办法
2万
查看次数

python将字符串转换为参数列表

我可以在python中将字符串转换为参数列表吗?

def func(**args):
    for a in args:
        print a, args[a]

func(a=2, b=3)

# I want the following work like above code
s='a=2, b=3'
func(s)
Run Code Online (Sandbox Code Playgroud)

我知道:

list can,只需使用*list,但list不能有如下元素:a = 2

和eval只能评估表达式

这将是:

def func2(*args):
    for a in args:
        print a

list1=[1,2,3]
func2(*list1)
func2(*eval('1,2,3'))
Run Code Online (Sandbox Code Playgroud)

python eval

10
推荐指数
2
解决办法
9731
查看次数