2012-05-04 18 views
3

Tastypieを使用してユーザーの入力をサニタイズする最も効果的な方法は何でしょうか?今のところ、ユーザーがのように「」と入力すると、HTMLタグが保存されるので、表示されるときにはテキストが太字で表示されます。各リソースのobj_createを変更するだけでなく、どのようにすべての入力をサニタイズできますか?Tastypieサニタイズ入力?

また、私はウェブセキュリティの新しさであるため、フロントエンドでユーザーの入力を消毒する必要がありますか?私はtastypie APIにPOST要求を送る前に入力をサニタイズする必要があるかどうか、またはtastypieが入力を処理しているときに入力をサニタイズする必要があるかどうかはわかりません。

編集:<%=%>ではなく、<% - %>のデータを表示することで、アンダースコアテンプレートでHTMLをエスケープできることがわかりました。デフォルトでは、なぜこれを強調しないのですか?私はそれが大きなセキュリティリスクであるように感じます。 私はこれを間違ってどこかでやることを忘れてしまったら、私はうんざりです。

私は上記がフロントエンドのセキュリティ問題を解決すると思いますが、バックエンドはどうですか? SQLインジェクションに脆弱であるかどうかはわかりますか? POST/PUTリクエストを行うと、tastypieは入力をサニタイズしますか?

答えて

1

これまで、信頼できないユーザーの入力をブラウザに表示したことはありません。出力フィルタに|safeがある場合は、ブラウザで表示される唯一の方法です。それをしないでください。モデルでmark_safe = Trueとしてプロパティを設定しないでください。

+0

| safeでフィルタリングすると、Djangoテンプレートを参照していますか?私はモデルをレンダリングするためにDjangoテンプレートを使用していません。アンダースコアテンプレートを使用しています。また、私はモデルでmark_safe = Trueを持っていないので、どのようにHTMLタグが通過しているのですか?アンダースコアがHTMLをエスケープしていないかどうか分かりますが、DjangoはHTMLタグを保存しませんか? – egidra

+0

上記のコメントについては心配しないでください。元の投稿を編集しました。 – egidra

+0

私はコメントを残しています。デフォルトでDjangoは危険なコンテンツを表示することはありません。私はDBに格納する前に入力を変更しないだろう、私はそれを表示しないだろう。それは悪いデフォルトとアンダースコアを知って良い私たちではない! :)安全でない入力に起因するdjangoコアまたはtastypieには、既知のSQLインジェクションの脆弱性はありません。 SQLを呼び出す前に物事を適切にエスケープする –

0

私はそうのように、ブラウザにそれの途中で危険なフィールドを上書きし、リソースへの脱水方法を追加しました:

def dehydrate(self, bundle): 
    bundle.data['field_to_sanitize'] = bundle.data['field_to_sanitize'].replace("&", "&amp;").replace("<", "&lt;").replace(">", "&gt;").replace("'", "&#39;").replace('"', "&quot;") 
    return bundle 

は今、これが最善の解決策ではありませんが、それはの多くをエスケープします最も危険な存在です。便利なhtmlescape関数があれば、それを使うことができます。

関連する問題