2017-11-27 12 views
1

簡潔で簡単に英語で説明できるかどうか質問したい how cleaned_data()関数によるデータの検証は可能ですか?cleaned_data()による検証

私はDjango を搭載したWebアプリケーションを設計していますが、最初はcleaned_data()が潜在的に有害な文字を含むユーザーの入力をブロックするほどスマートだと思っていました。例えば、' ; < >と同様です。 SQLインジェクション攻撃に使用できる文字。 私の驚いたことに、意図的にフォームフィールドにそれらの文字のいくつかを滑り込ませると、入力はデータベースにそれを作った。私はかなりショックを受けました。

だから... cleaned_data()の機能は何ですか?

私はこの機能についてはドキュメントで読んでいますが、これに必ずしも答えは見つかりませんでした。

答えて

0

cleaned_dataは、validated form dataです。たとえば、必要なCharFieldがある場合、CharFieldが存在するかどうか、十分な文字があるかどうかが検証されます。 EmailFieldがある場合、電子メールアドレスが含まれていることを検証します。

Take a look at some of the build in form fieldsあなたができることのより良いアイデア。

XSSまたはSQLインジェクションを防止するためのものではありません。あなたのフォームは、あなたが設定した基本ルールに従っていることを確認するだけです。

+0

甘い...シンプルで簡潔で直感的な答えです。いいぞ ! –

+0

少なくとも、私は自分でバリデーションを行い、入力をサニタイズする必要があることを知っています。 –

0

あなたは誤解してcleaned_dataです。

様々な検証 後にユーザが入力したデータが含まれているのdict(組み込みまたはカスタム)

今、言われていることを、すべてのを理解するために:cleaned_dataの最も簡単な定義は何かに似ています検証を行うためのステップはlinkを参照してください(それは大きく説明されているので、ホイールを再発明するのは馬鹿になるでしょう)。

SQLインジェクションに関しては、これも別の問題です。しかし、再び、Djangoはそれを処理する組み込みの方法として、これはdocumentationからです:

Djangoのクエリセットを使用することにより、結果のSQLが正しく 基盤となるデータベースドライバによってエスケープされます。しかし、Djangoは の開発者にrawクエリを書いたり、カスタムSQLを実行する権限を与えています。これらの 機能は控えめに使用する必要があります。ユーザーが制御できるすべてのパラメータを適切にエスケープするには、常に に注意する必要があります。 また、あなたは余分な()とRawSQL使用しているとき、私は完全にあなたの混乱を見ることができます

..注意して、彼らは二つの異なるものであることを覚えておいてください。

+0

説明していただきありがとうございます。はい、これは辞書ベースの関数であることをドキュメントから学びました。私はちょうどそれが実際に動作する方法を誤解しました。上記のように、私はそれが悪意のある入力をサニタイズするように設計されていると考えました。 –

関連する問題