Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Security / escape sandbox #76

Closed
baszczewski opened this issue Apr 11, 2024 · 1 comment
Closed

Security / escape sandbox #76

baszczewski opened this issue Apr 11, 2024 · 1 comment

Comments

@baszczewski
Copy link

I would like to know if using this project is safe in a production environment? Has eval been used at any stage? Do user-written expressions have the chance to escape the sandbox like in an alternative project (browserify/static-eval#32)?

@FlavioLionelRita
Copy link
Collaborator

Hello good morning.
I don't use eval anywhere in the code.
To resolve the expressions, they are parsed, converting them into a tree of operators and operands.
Example:

private operators (model: ModelService): void {
	model.addOperator('+(a:T,b:T):T', (a: any, b: any):any => a + b, { priority: 5 })
	model.addOperator('-(a:number,b:number):number', (a: number, b: number):number => a - b, { priority: 5 })
	model.addOperator('-(a:number):number', (a: number):number => a * -1, { priority: 9 })
	model.addOperator('*(a:number,b:number):number', (a: number, b: number):number => a * b, { priority: 6 })
	model.addOperator('/(a:number,b:number):number', (a: number, b: number):number => a / b, { priority: 6 })
	model.addOperator('**(a:number,b:number):number', (a: number, b: number):number => a ** b, { priority: 7 })
	model.addOperator('//(a:number,b:number):number', (a: number, b: number):number => Math.pow(a, 1 / b), { priority: 7 })
	model.addOperator('%(a:number,b:number):number', (a: number, b: number):number => a % b, { priority: 8 })

	model.addOperator('&(a:number,b:number):number', (a: number, b: number):number => a & b, { priority: 5 })
	model.addOperator('|(a:number,b:number):number', (a: number, b: number):number => a | b, { priority: 5 })
	model.addOperator('^(a:number,b:number):number', (a: number, b: number):number => a ^ b, { priority: 5 })
	model.addOperator('~(a:number):number', (a: number):number => ~a, { priority: 9 })
	model.addOperator('<<(a:number,b:number):number', (a: number, b: number):number => a << b, { priority: 5 })
	model.addOperator('>>(a:number,b:number):number', (a: number, b: number):number => a >> b, { priority: 5 })

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants