summaryrefslogtreecommitdiff
path: root/src/tests
diff options
context:
space:
mode:
authorjvoisin2018-01-10 14:56:33 +0100
committerGitHub2018-01-10 14:56:33 +0100
commitad6b3e723fe26bf1a3a573aed776960916d35499 (patch)
treeeec9e15028f4529d776489d273bf9699333aa987 /src/tests
parentb6e5bc4557cca3abbcfd179e7143ea54b9844e49 (diff)
Eval whitelist
Implement whitelist in eval
Diffstat (limited to 'src/tests')
-rw-r--r--src/tests/config/eval_backlist.ini2
-rw-r--r--src/tests/config/eval_backlist_list.ini2
-rw-r--r--src/tests/config/eval_backlist_simulation.ini2
-rw-r--r--src/tests/config/eval_whitelist.ini1
-rw-r--r--src/tests/eval_backlist_whitelist.phpt27
-rw-r--r--src/tests/eval_whitelist_builtin.phpt19
-rw-r--r--src/tests/eval_whitelist_include_then_user.phpt29
-rw-r--r--src/tests/eval_whitelist_user_then_builtin.phpt23
8 files changed, 102 insertions, 3 deletions
diff --git a/src/tests/config/eval_backlist.ini b/src/tests/config/eval_backlist.ini
index 1e34b5b..b181598 100644
--- a/src/tests/config/eval_backlist.ini
+++ b/src/tests/config/eval_backlist.ini
@@ -1 +1 @@
sp.eval_filter.blacklist("strlen"); sp.eval_blacklist.list("strlen");
diff --git a/src/tests/config/eval_backlist_list.ini b/src/tests/config/eval_backlist_list.ini
index da5650d..b395d03 100644
--- a/src/tests/config/eval_backlist_list.ini
+++ b/src/tests/config/eval_backlist_list.ini
@@ -1 +1 @@
sp.eval_filter.blacklist("strcmp,strlen"); sp.eval_blacklist.list("strcmp,strlen");
diff --git a/src/tests/config/eval_backlist_simulation.ini b/src/tests/config/eval_backlist_simulation.ini
index fafebd5..2d8dc73 100644
--- a/src/tests/config/eval_backlist_simulation.ini
+++ b/src/tests/config/eval_backlist_simulation.ini
@@ -1 +1 @@
sp.eval_filter.blacklist("strlen").simulation(); sp.eval_blacklist.list("strlen").simulation();
diff --git a/src/tests/config/eval_whitelist.ini b/src/tests/config/eval_whitelist.ini
new file mode 100644
index 0000000..7a8f6ef
--- /dev/null
+++ b/src/tests/config/eval_whitelist.ini
@@ -0,0 +1 @@
sp.eval_whitelist.list("my_fun,cos");
diff --git a/src/tests/eval_backlist_whitelist.phpt b/src/tests/eval_backlist_whitelist.phpt
new file mode 100644
index 0000000..1611288
--- /dev/null
+++ b/src/tests/eval_backlist_whitelist.phpt
@@ -0,0 +1,27 @@
1--TEST--
2Eval whitelist
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/eval_whitelist.ini
7--FILE--
8<?php
9function my_fun($p) {
10 return "my_fun: $p";
11}
12
13function my_other_fun($p) {
14 return "my_other_fun: $p";
15}
16
17$a = my_fun("1337 1337 1337");
18echo "Outside of eval: $a\n";
19eval('$a = my_fun("1234");');
20echo "After allowed eval: $a\n";
21eval('$a = my_other_fun("1234");');
22echo "After eval: $a\n";
23?>
24--EXPECTF--
25Outside of eval: my_fun: 1337 1337 1337
26After allowed eval: my_fun: 1234
27[snuffleupagus][0.0.0.0][Eval_whitelist][drop] The function 'my_other_fun' isn't in the eval whitelist, dropping its call.
diff --git a/src/tests/eval_whitelist_builtin.phpt b/src/tests/eval_whitelist_builtin.phpt
new file mode 100644
index 0000000..bd7c2ac
--- /dev/null
+++ b/src/tests/eval_whitelist_builtin.phpt
@@ -0,0 +1,19 @@
1--TEST--
2Eval whitelist - builtin function
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/eval_whitelist.ini
7--FILE--
8<?php
9$a = cos(1);
10echo "Outside of eval: $a\n";
11eval('$a = cos(5);');
12echo "After allowed eval: $a\n";
13eval('$a = sin(4);');
14echo "After eval: $a\n";
15?>
16--EXPECTF--
17Outside of eval: 0.54030230586814
18After allowed eval: 0.28366218546323
19[snuffleupagus][0.0.0.0][Eval_whitelist][drop] The function 'sin' isn't in the eval whitelist, dropping its call.
diff --git a/src/tests/eval_whitelist_include_then_user.phpt b/src/tests/eval_whitelist_include_then_user.phpt
new file mode 100644
index 0000000..6d4e36a
--- /dev/null
+++ b/src/tests/eval_whitelist_include_then_user.phpt
@@ -0,0 +1,29 @@
1--TEST--
2Eval whitelist - builtin function
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/eval_whitelist.ini
7--FILE--
8<?php
9$b = 1337;
10$dir = __DIR__;
11
12file_put_contents($dir . '/test.bla', '<?php $b = sin(1) ?>');
13
14$a = cos(1);
15echo "Outside of eval: $a\n";
16eval('$a = cos(5);');
17echo "After allowed eval: $a\n";
18eval("include_once('$dir' . '/test.bla');");
19echo "After eval: $b\n";
20?>
21--CLEAN--
22<?php
23$dir = __DIR__;
24unlink($dir . '/test.bla');
25?>
26--EXPECTF--
27Outside of eval: 0.54030230586814
28After allowed eval: 0.28366218546323
29[snuffleupagus][0.0.0.0][Eval_whitelist][drop] The function 'sin' isn't in the eval whitelist, dropping its call.
diff --git a/src/tests/eval_whitelist_user_then_builtin.phpt b/src/tests/eval_whitelist_user_then_builtin.phpt
new file mode 100644
index 0000000..8db36fc
--- /dev/null
+++ b/src/tests/eval_whitelist_user_then_builtin.phpt
@@ -0,0 +1,23 @@
1--TEST--
2Eval whitelist - builtin function
3--SKIPIF--
4<?php if (!extension_loaded("snuffleupagus")) die "skip"; ?>
5--INI--
6sp.configuration_file={PWD}/config/eval_whitelist.ini
7--FILE--
8<?php
9
10function my_fun() {
11 return sin(10);
12}
13
14$a = my_fun(1);
15echo "Outside of eval: $a\n";
16eval('$a = my_fun(5);');
17echo "After allowed eval: $a\n";
18eval('$a = my_fun(4);');
19echo "After eval: $a\n";
20?>
21--EXPECTF--
22Outside of eval: -0.54402111088937
23[snuffleupagus][0.0.0.0][Eval_whitelist][drop] The function 'sin' isn't in the eval whitelist, dropping its call.