5

私はちょうどアイデアをいじっていましたが、セキュリティの問題を悩ませずにバックエンドでこれを解決する方法を思いつきませんでした。

Web サービスを介して単純なアルゴリズムを作成し、小さなリストでこれらをテストする機会をユーザーに与えたいとします。たとえばrange(0, 5)、別の Web サービス、テンプレート、または電子メールを介して結果を報告します。実際には問題ではなく、評価です。私を悩まします。

パイソンの使用:

class Algorithm(whatever):
    function = whatever.CharField(max_length=75)

ユーザーは次のように入力します。

'f(x)=x+(x/5)**0.75'

もちろんeval、ビルトインや "x" 以外の文字列などを削除して を使用することもできますが、これは残念な方法であることに変わりはありません。

私が思いついた唯一のことは、評価機能を JavaScript フロントエンドに移動することです。

4

1 に答える 1

3

eval()は悪であり、バックエンドでこれを行うことは非常に危険です。ただし、 Pythonサンドボックスを使用して安全に実行できます。しかし、サンドボックスがどこで失敗した場合、あなたは所有されるでしょう。これは、「多層防御」アプローチではありません。

より良いアプローチは、クライアント側でペイロードを評価することです...しかし、これはクロスサイトスクリプティング(XSS)です。攻撃者がこの問題を悪用できないようにする1つの方法は、ボタンが押されたときにフォームを評価するイベントハンドラーをクライアント側に配置することです。攻撃者がJavaScriptを実行するGETまたはPOSTリクエストを作成できる場合、攻撃者はXSSの脆弱性を悪用する可能性があります。また、クリックジャッキングx-frame-options: denyを防ぐように設定してください。

于 2012-12-03T16:54:59.877 に答える