web-dev-qa-db-ja.com

制限付き評価の脆弱性

このコードを悪用することは可能ですか?

eval ("\$RequestVariables = \$_REQUEST;");

または

eval ("\$ServerVariables = \$_SERVER;");

$_REQUESTまたは$_SERVERは配列ではなく、それが文字列またはintの場合、悪用することが可能でしたが、この場合は配列です。このコードを悪用することはまだ可能ですか?

4
JohnDoes

いいえ、それは悪用可能ではありません。

eval()に渡す文字列内のすべての変数は_\_エスケープされているため、展開されません。これは、常に文字通り評価していることを意味します...

_$RequestVariables = $_REQUEST;
_

...これは通常の割り当てであり、独自のコードを挿入することはできません。

_\_エスケープされていない場合はどうなりますか?

その場合、_$_REQUEST_と_$_SERVER_は配列であることが保証されており、配列の文字列表現は常にArrayであり、含まれている値を表示しないため、まだ運が悪い。

2
Arminius