検索

XSS と CSRF の詳細な紹介

Jun 29, 2017 am 10:40 AM
csrfdjango

1. XSS

クロスサイトスクリプティング (クロスサイトスクリプティング) は、Cascading Style Sheets (CSS) の略語と混同しないようにしてください。そのため、クロスサイトスクリプティング攻撃は XSS と略されます。悪意のある攻撃者は、Web ページに悪意のあるスクリプト コードを挿入し、ユーザーがそのページを閲覧すると、Web ページに埋め込まれたスクリプト コードが実行され、ユーザーに対する悪意のある攻撃の目的が達成されます。

1. ワークフロー

a. 悪意のあるユーザーが一部の公開領域 (提案送信フォームやメッセージ公開掲示板の入力フォームなど) にテキストを入力しますが、これらのテキストは他のユーザーには表示されません。入力するテキストだけでなく、クライアント側で実行できるいくつかのスクリプトも含まれます。例:

<script>&#39;Not Safe&#39;</script>

b. このフォームを悪意を持って送信します

c. 他のユーザーが悪意のあるスクリプトを含むこのページを見て、それらを実行してユーザーの Cookie やその他の機密情報を取得します。

2. 例 - XSS 攻撃を防止しない

 1 pinglu = []     # 评论列表 2  3 #提交表单 4 def commit(request): 5     if request.method == 'GET': 6         return render(request, 'commit.html') 7     else: 8         com = request.POST.get('commit') 9         pinglu.append(com)10         return redirect('/index.html/')11 12 13 #查看评论页面14 def index(request):15     return render(request, 'index.html', {'commit': pinglu})
view.py
 1 nbsp;html> 2  3  4     <meta> 5     <title>Title</title> 6  7  8 <h1 id="评论">评论</h1> 9 
10     11      {{ error }}12 
13 14 
commit.html
 1 nbsp;html> 2  3  4     <meta> 5     <title>Title</title> 6  7  8 <h1 id="评论">评论</h1> 9 {% for item in commit %}10     
{{ item|safe }}
11 {#    item后加safe,默认数据安全,django不会做特殊处理#}12 {% endfor %}13 14 
Index.html
上記の例では、commit.html ページに次の内容を入力して送信すると、

<script> alert(&#39;恶意脚本&#39;) </script>
、このコード行がインデックス ページで実行され、警告ボックスがポップアップ表示されます。 (悪意のあるコードが含まれている場合は実行されます)

3. XSS 攻撃を防ぐ最も直接的な方法

  • は、制御できない入力に対して HTML ページでセーフを使用しないことです

{#    <div>{{ item|safe }}</div>#}<div>{{ item }}</div>
  • ビューでフィルタリングして、特殊文字がデータベースや Web ページに送信されないようにすることもできます

def commit(request):if request.method == 'GET':return render(request, 'commit.html')else:
        com = request.POST.get('commit')if '<script>&#39; in com:    # 过滤“<script>”关键字,防止恶意代码的提交return render(request, &#39;commit.html&#39;, {&#39;error&#39;: &#39;此条评论有毒,已被和谐&#39;})else:
            pinglu.append(com)return redirect(&#39;/index.html/&#39;)</script>

2. CSRF

CSRF (クロスサイト リクエスト フォージェリ)クロスサイト リクエスト フォージェリ (「ワン クリック攻撃」またはセッション ライディング (CSRF または XSRF と略されることも多い) とも呼ばれる) は、Web サイトの悪意のある悪用です。クロスサイト スクリプティング (XSS) のように聞こえますが、サイト内の信頼できるユーザーを悪用する XSS とは大きく異なります。一方、CSRF は信頼できるユーザーからのリクエストを偽装することで信頼できる Web サイトを悪用します。 XSS 攻撃と比較すると、CSRF 攻撃はあまり普及していない傾向があり (したがって、CSRF 攻撃を防ぐためのリソースも非常に不足しています)、防ぐのが難しいため、XSS よりも危険であると考えられています。

1. ワークフロー

攻撃は、許可されたユーザーがアクセスするページにリンクまたはスクリプトを含めることによって機能します:

2. ユーザーのクロスサイトリクエストフォージェリを防ぐために django で

django を防ぐ方法 機能はミドルウェア django.middleware.csrf.CsrfViewMiddleware を通じて完了します。 Django のクロスサイト リクエスト フォージェリ対策機能は、グローバルとローカルに分かれています。

グローバル:

  • ミドルウェアを有効にする django.middleware.csrf.CsrfViewMiddleware

部分:

from django.views.decorators.csrf import csrf_exempt,csrf_protect
  • @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件

  • @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

 3. django中的具体应用方法

  • form表单中添加{csrf_token %}

若form表单中未添加{csrf_token %},则会报403错误。

#settings.py中打开MIDDLEWARE设置'django.middleware.csrf.CsrfViewMiddleware',
1 from django.shortcuts import render, HttpResponse, redirect2 3 def csrf_test(request):4     if request.method == 'GET':5         return render(request, 'csrf_test.html')6     else:7         return HttpResponse('ok')
views.py
 1 nbsp;html> 2  3  4     <meta> 5     <title>csef_test</title> 6  7  8 
 9     10     11 
12 13 14 
csef_test.html

修改csef_test.html:

 1 nbsp;html> 2  3  4     <meta> 5     <title>csef_test</title> 6  7  8 
 9     {% csrf_token %}10     11     12 
13 14 15 
form表单中添加{% csrf_token %}

  • 全站禁用,即将settings.py中的 'django.middleware.csrf.CsrfViewMiddleware' 注释掉即可

  • 基于FBV视图的局部禁用和使用

 1 #settings.py 2 #启用 'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views.decorators.csrf import csrf_exempt 6  7  8 @csrf_exempt 9 def csrf_test(request):10     if request.method == 'GET':11         return render(request, 'csrf_test.html')12     else:13         return HttpResponse('ok')
局部禁用
 1 #settings.py 2 #禁用 #'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views.decorators.csrf import csrf_protect 6  7  8 @csrf_protect 9 def csrf_test(request):10     if request.method == 'GET':11         return render(request, 'csrf_test.html')12     else:13         return HttpResponse('ok')
局部使用
  •  基于CBV视图的(只能局部使用或禁用类,不能在类方法里局部使用或禁用

 1 #settings.py 2 #禁用    'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views import View 6 from django.views.decorators.csrf import csrf_protect 7 from django.utils.decorators import method_decorator 8  9 10 @method_decorator(csrf_protect, name='dispatch')11 class Foo(View):12     def get(self, request):13         pass14 15     def post(self, request):16         pass
局部使用
 1 #settings.py 2 #启用    'django.middleware.csrf.CsrfViewMiddleware', 3  4  5 from django.views import View 6 from django.views.decorators.csrf import csrf_exempt 7 from django.utils.decorators import method_decorator 8  9 10 @method_decorator(csrf_exempt, name='dispatch')11 class Foo(View):12     def get(self, request):13         pass14 15     def post(self, request):16         pass
局部禁用
  • Ajax提交数据时,携带CSRF

 1 nbsp;html> 2  3  4     <meta> 5     <title>csef_test</title> 6  7  8 
 9     {% csrf_token %}10     11 {#    #}12     Ajax提交表单13 
14 15 <script></script>16 <script>17 function submitForm() {18 var csrf = $("input[name=&#39;csrfmiddlewaretoken&#39;]").val()19 var user = $("#user").val()20 $.ajax({21 url: &#39;/csrf_test.html/&#39;,22 type: &#39;POST&#39;,23 data: {"user": user, "csrfmiddlewaretoken": csrf},24 success: function (arg) {25 console.log(arg);26 }27 })28 }29 </script>30 31 
Ajax重写csrf_test,html,csrf数据存放于data中
 1 nbsp;html> 2  3  4     <meta> 5     <title>csef_test</title> 6  7  8 
 9     {% csrf_token %}10     11 {#    #}12     Ajax提交表单13 
14 15 <script></script>16 {#专门处理cookie的插件,提取cookie字符串#}17 <script></script>18 19 {#csrf数据放于data中#}20 {#<script>#}21 {# function submitForm() {#}22 {# var csrf = $("input[name=&#39;csrfmiddlewaretoken&#39;]").val();#}23 {# var user = $("#user").val();#}24 {# $.ajax({#}25 {# url: &#39;/csrf_test.html/&#39;,#}26 {# type: &#39;POST&#39;,#}27 {# data: {"user": user, "csrfmiddlewaretoken": csrf},#}28 {# success: function (arg) {#}29 {# console.log(arg);#}30 {# }#}31 {# })#}32 {# }#}33 {#</script>#}34 35 {#csrf数据放于请求头中#}36 <script>37 function submitForm() {38 var csrf = $.cookie(&#39;csrftoken&#39;);39 var user = $("#user").val();40 $.ajax({41 url: &#39;/csrf_test.html/&#39;,42 type: &#39;POST&#39;,43 headers: {&#39;X-CSRFToken&#39;: csrf},44 data: {"user": user},45 success: function (arg) {46 console.log(arg);47 }48 })49 }50 </script>51 52 53 54 55 
Ajax重写csrf_test.html,csrf数据存放于headers中

注意:{csrf_token %}和cookie中的csrftoken值不一样。

form表单中的隐藏csrf_token

 cookie中

 

以上がXSS と CSRF の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonアレイに要素をどのように追加しますか?Pythonアレイに要素をどのように追加しますか?Apr 30, 2025 am 12:19 AM

inpython、youappendelementStoalistusingtheappend()method.1)useappend()forsingleelements:my_list.append(4).2)useextend()or = formultipleElements:my_list.extend(another_list)ormy_list = [4,5,6] .3)forspecificpositions:my_list.insert(1,5).beaware

シバン関連の問題をどのようにデバッグしますか?シバン関連の問題をどのようにデバッグしますか?Apr 30, 2025 am 12:17 AM

シェバンの問題をデバッグする方法には次のものがあります。1。シバン行をチェックして、それがスクリプトの最初の行であり、接頭辞スペースがないことを確認します。 2.通訳パスが正しいかどうかを確認します。 3.通訳を直接呼び出してスクリプトを実行して、シェバンの問題を分離します。 4. StraceまたはTrustsを使用して、システムコールを追跡します。 5.シバンに対する環境変数の影響を確認してください。

Pythonアレイから要素をどのように削除しますか?Pythonアレイから要素をどのように削除しますか?Apr 30, 2025 am 12:16 AM

pythonlistscanbemanipulatedsingseveralmethodstoremoveElements:1)theremove()methodremovesthefirstoccurrenceofaspecifiedValue.2)thepop()methop()methodremovessanelementatagivenindex.3)thedelstatementementementementementementementementementemoritemoricedex.4)

Pythonリストに保存できるデータ型は何ですか?Pythonリストに保存できるデータ型は何ですか?Apr 30, 2025 am 12:07 AM

Integers、strings、floats、booleans、otherlists、anddictionaryを含むpythonlistscanstoreanydatype

Pythonリストで実行できる一般的な操作は何ですか?Pythonリストで実行できる一般的な操作は何ですか?Apr 30, 2025 am 12:01 AM

PythonListsSupportNumersoperations:1)AddingElementSwithAppend()、Extend()、Andinert()

numpyを使用してマルチディメンシャルアレイをどのように作成しますか?numpyを使用してマルチディメンシャルアレイをどのように作成しますか?Apr 29, 2025 am 12:27 AM

Numpyを使用して多次元配列を作成すると、次の手順を通じて実現できます。1)numpy.array()関数を使用して、np.array([[1,2,3]、[4,5,6]])などの配列を作成して2D配列を作成します。 2)np.zeros()、np.ones()、np.random.random()およびその他の関数を使用して、特定の値で満たされた配列を作成します。 3)アレイの形状とサイズの特性を理解して、サブアレイの長さが一貫していることを確認し、エラーを回避します。 4)np.reshape()関数を使用して、配列の形状を変更します。 5)コードが明確で効率的であることを確認するために、メモリの使用に注意してください。

Numpyアレイの「ブロードキャスト」の概念を説明します。Numpyアレイの「ブロードキャスト」の概念を説明します。Apr 29, 2025 am 12:23 AM

BroadcastinginNumPyisamethodtoperformoperationsonarraysofdifferentshapesbyautomaticallyaligningthem.Itsimplifiescode,enhancesreadability,andboostsperformance.Here'showitworks:1)Smallerarraysarepaddedwithonestomatchdimensions.2)Compatibledimensionsare

データストレージ用のリスト、array.array、およびnumpy配列を選択する方法を説明します。データストレージ用のリスト、array.array、およびnumpy配列を選択する方法を説明します。Apr 29, 2025 am 12:20 AM

Forpythondatastorage、chooseLists forfficability withmixeddatypes、array.arrayformemory-efficienthogeneousnumericaldata、およびnumpyArrays foradvancednumericalcomputing.listSareversatilebuteficient efficient forlargeNumericaldatates;

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境