155.XSS攻撃

XSS攻撃:

XSS(クロスサイトスクリプト)攻撃は、彼の原則は、ユーザーがWebサイトのXSSの脆弱性を持っている場合に使用することで、クロスサイトスクリプティング攻撃と呼ばれ、悪質なコードは、このサイトに提出するときに、ユーザーにこのサイトのページにアクセスして、この悪意のあるコードは、これにより、ウェブの構造を破壊し、ユーザーの個人情報にアクセスするには、実行されます。

XSS攻撃のシナリオ:

データの提出時に、ユーザは、ウェブページなどのjsのコードを、提出された場合例えば、公表されたエントリの投稿は、今そこにある、とこのコードの直接レンダリングをレンダリングするときに、それがブラウザウィンドウにダイアログをポップアップ表示されますボックスが表示されますこんにちは世界!攻撃者がこのjsのコードを実行できる場合は、彼はより多くのjsのコードを実行することができ、その後、このように非常に安全ではないとして、当社のウェブサイトのユーザー情報を行います当社のウェブサイトを、操作します。

XSS攻撃防止:

1.あなたは、ユーザーの直接のエスケープそれによって提出されたデータをレンダリングし、いくつかのリッチテキストが表示されない場合。デフォルトでは、Djangoテンプレートを脱出することです。データはまた、レンダリング後にするとき、次のように、何のエスケープ安全性の問題、サンプルコードは存在しません、そうでない場合という、店に脱出するために、データベースに格納することができ、前に:
from django.template.defaultfilters import escape
from .models import Comment
from django.http import HttpResponse

def add_comments(request):
    content = request.POST.get('content')
    <!--使用escape()函数,可以在数据存储到数据库之前先进行转义,再存储到数据库中,这样即使之后网页不进行转义,也没有关系-->
    escaped_content = escape(content)
    Comment.objects.create(content=escaped_content)
    return HttpResponse('success!')
2.ユーザーのアップにより提出されたデータは、いくつかのリッチテキストが含まれている場合(例:フォントの色を設定するには、フォント、太字など)を、あなたは安全な使用する必要があるときに我々が持っているこの時間は、リッチテキストのレンダリングの形でレンダリングされるように、フィルタはとてもリッチテキストのスタイルを表示するよう、安全としてマークするが、これは、問題があるかどう攻撃コードアップユーザーの提出データ?この時点で、その後、次のように、安全で死ぬようにしてください、サンプルコードとしてマーク:
<ul>
    {% for comment in comments %}
    <!--使用safe过滤器,将数据标记为安全的-->
        <li>{{ comment.id }} . {{ comment.comment|safe }}</li>
    {% endfor %}
</ul>
さて、この時間は、どのようにそれに対処するには?我々はいくつかのタグを指定することができます。この時間は、私たちが(例えば、spanタグ)必要なものである、と私たちのラベルの一部は(:スクリプトをたとえば)は必要ありません。我々はこれらのサーバーのデータを扱う際さて、あなたはあなたが私たちの問題を解決できるように、データは、ラベルをエスケープするか、直接削除された必要はありません保持タグを付けることができ、この方法は実現可能です、多くの行のサイトでは、あまりにも、私たちは、この問題に対処するためのpythonでの消毒剤を使用することができるというライブラリがあります。
リッチテキスト文字列処理
(1)ライブラリーを洗浄するための漂白剤は、html形式の文字列を含むライブラリである、彼は財産が必要とされていないにも保持することができlabelプロパティで指定することができ、フィルタリングすべきであるラベルのラベルを、、保持する必要があるかを指定することができます、あなたはこのライブラリを使用すると、インストールするには、漂白剤のコマンドをインストールするPIP実行することができます。
(2)このライブラリの方法は、サンプルコード、次の)最も重要なbleach.clean()メソッド、bleach.clean(次のとおりです。
@require_POST
def add_comments(request):
    # 从客户端获取数据
    comment = request.POST.get('comment')
    # bleach默认定义的一些标签,在原来的基础上添加一个img标签
    tags = ALLOWED_TAGS + ['img']
    # bleach默认定义的一些属性,在原来的基础上,在img标签上添加一个src属性
    <!--这里使用**ALLOWED_ATTRIBUTES,主要是将ALLOWED_ATTRIBUTESdict中的键值对打散开,之后,可以和'img':['src'],进行拼接成一个字典-->
    如果不打散的话就会形成{{},'key':'value'}
    attributes = {**ALLOWED_ATTRIBUTES, 'img': ['src']}
    <!--选择符合bleach.clean()方法中tags和标签都符合的comment-->
    clean_data = bleach.clean(comment, tags=tags, attributes=attributes)
    # 保存到数据库中
    Comment.objects.create(comment=clean_data)
    return redirect(reverse('index'))
(1)タグ:タグが許可かを示します。
(2)属性:プロパティ]タブを許可されていることを示します。
(3)ALLOWED_TAGS:この変数は、満たされていない場合、デフォルトの漂白剤でラベルの一部が定義されているが増減または削除することができます。
(4)ALLOWED_ATTRIBUTES:この変数は、満たされていない場合は、漂白剤のデフォルト属性を定義しているが増減または削除することができます。
ロード・ラベルにデフォルトのページでこのviews.py以上、IMGタグを追加したとのimgのsrcタグの属性を追加し、プロジェクト内のjsファイルを作成し、サンプルコードを以下のように:
window.onload = function () {
    var imgTag = document.createElement('img');
    imgTag.setAttribute('src', 'http://img.haote.com/upload/news/image/20170605/20170605144101_12960.jpg');
    document.body.appendChild(imgTag);
};
この時点では、index.htmlをでのjsファイルを読み込むことができますし、ロードされたのimg完璧な絵することができます。

おすすめ

転載: www.cnblogs.com/guyan-2020/p/12348065.html