2

私の UI では、ユーザーは次のような JavaScript オブジェクトを作成できます。

var box = {
    "width": "100px",
    "height": "200px",
    "click": function () {
        alert("You clicked the box");
    }
};

これは有効な JavaScript オブジェクトです。今、これをphpで検証する方法が必要です。私はjson_encode/を使うことができますjson_decodeが、それはうまくいきません"function() ..."。何か提案はありますか?

4

3 に答える 3

4

迅速で汚い、安全でない解決策として、をサーバーにインストールし、PHP を呼び出しexec()てコードを検証することができます。

ドキュメントによると、exec は次のように定義されています。

string exec ( string $command [, array &$output [, int &$return_var ]] )

ノードでは、-eフラグを使用して JavaScript 文字列を評価できます。コマンドラインを使用した例:

> node -e 'invalid javascript'
SyntaxError: Unexpected identifier
> $?
-bash: 8: command not found   # <-- return status!

これを PHP の exec と結び付けると、次のようになります。

<? php
$userJavaScript = getUserJavaScriptSomehow();
exec("node -e '" + $userJavaScript + "'", $output, $return_var);
if ($return_var !== 0) {
    // something went wrong with parsing it.
}
?>

これは恐ろしい解決策であることに注意してください。ユーザーが任意のコードを実行できることを考慮して、クライアント側で JavaScript を検証し、サーバー側で検証を行うことを忘れたほうがよいでしょう。ファイル アクセスや無限ループなどから保護する必要があります。

于 2013-09-02T13:13:24.127 に答える
2

ユーザー入力から構築されたオブジェクトを検証しようとしていると思います。PHP で完全な JavaScript パーサーを作成するのは難しいため、次の方法をお勧めします。すべてのデータを入力したら、Ajax を介して PHP スクリプトから JavaScript オブジェクトを要求します。次に、クライアント側で評価を実行して、エラーがあるかどうかを確認できます。

より一般的なアドバイス: 実行可能なコードとデータを混在させないでください! クライアントとサーバーの間で簡単に検証可能な JSON オブジェクトを交換し、JSON オブジェクトを処理する静的な JavaScript コードを記述するだけです。これにより、ユーザー入力によるコード インジェクションからも保護されます。

于 2013-09-02T13:04:19.260 に答える
2

PHP はコードの JSON 部分しか検証できませんでした。サーバー側のテクノロジーが必要な場合は、nodejs を使用してください。node code.jsを介してコードを単純に実行し、エラーがあるかどうかを確認します。したがって、コードを取得してファイルに保存し、それに対してノードを実行する必要があると思います。

于 2013-09-02T13:05:13.547 に答える