জ্যাঙ্গোর সিএসআরএফ বৈধতা কীভাবে অক্ষম করবেন?


111

আমি সিএসআরএফ প্রসেসর এবং মিডলওয়্যার লাইনগুলিতে মন্তব্য করেছি settings.py:

122 
123 TEMPLATE_CONTEXT_PROCESSORS = (
124     'django.contrib.auth.context_processors.auth',
125 #    'django.core.context_processors.csrf',
126     'django.core.context_processors.request',
127     'django.core.context_processors.static',
128     'cyathea.processors.static',
129 )
130 
131 MIDDLEWARE_CLASSES = (
132     'django.middleware.common.CommonMiddleware',
133     'django.contrib.sessions.middleware.SessionMiddleware',
134 #    'django.middleware.csrf.CsrfViewMiddleware',
135     'django.contrib.auth.middleware.AuthenticationMiddleware',
136     'django.contrib.messages.middleware.MessageMiddleware',
137     'django.middleware.locale.LocaleMiddleware',
138     # Uncomment the next line for simple clickjacking protection:
139     # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
140 )

তবে যখন আমি একটি অনুরোধ প্রেরণ করতে আজাক্স ব্যবহার করি তখন জ্যাঙ্গো এখনও 'সিএসআরএফ টোকেনটি ভুল বা অনুপস্থিত' প্রতিক্রিয়া জানায় এবং এক্স-সিএসআরএফ টোকেনকে শিরোনাম যুক্ত করার পরে, অনুরোধটি সফল হবে।

এখানে কি হচ্ছে ?


সম্ভাব্য সদৃশ: স্ট্যাকওভারফ্লো.com
রোহান

উত্তর:


232

আপনার যদি কেবল সিএসআরএফ ব্যবহার না করার জন্য কিছু ভিউ প্রয়োজন হয় তবে আপনি ব্যবহার করতে পারেন @csrf_exempt:

from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def my_view(request):
    return HttpResponse('Hello world')

জাজানো ডকুমেন্টেশনে আপনি আরও উদাহরণ এবং অন্যান্য পরিস্থিতি খুঁজে পেতে পারেন:


2
হাই, @ দ্য ব্রোনক্স, আমি সত্যিই জানতে চাই কেন আমার সমাধান কাজ করে না।
WoooHaaaa

1
দুঃখিত @ এমরোয় আমি জানি না কেন আপনার সমাধান কাজ করছে না। আমি কেবল জানি যে @csrf_exempআমি সম্প্রতি সমস্যা ছাড়াই এটি ব্যবহার করেছি works আশা করি আপনি উত্তরটি খুঁজে পেয়েছেন।
সালভাতোরালব

6
@ ম্রয়, এটি জ্যাঙ্গো জিনিস। বেশিরভাগ জিনিসই কাজ করে / কাজ করে না কারণ একটি কোড ম্যাজিকের নীচে নিচে একটি যাদু সেটিং রয়েছে।
ইদুরসুন

2
একটি অনুস্মারক: একই দৃষ্টিতে যদি আপনার অন্যান্য সজ্জকারও থাকে তবে ক্রমটি প্রাসঙ্গিক: সুতরাং প্রথমে @ সিএসআরএফ_মুক্ত করুন।
প্যাট্রিক বাসুত

3
হুম- সম্ভবত প্রযুক্তিগতভাবে সঠিক উত্তর হতে পারে তবে ওপি যা চেয়েছিল বা আমি যা খুঁজছিলাম তা সম্ভবত তা নয়।
ড্যানি স্ট্যাপল

40

শ্রেণিভিত্তিক দর্শনের জন্য সিএসআরএফ অক্ষম করতে আমার জন্য নিম্নলিখিতগুলি কাজ করেছিল।
জ্যাঙ্গো 1.10 এবং অজগর 3.5.2 ব্যবহার করে

from django.views.decorators.csrf import csrf_exempt
from django.utils.decorators import method_decorator

@method_decorator(csrf_exempt, name='dispatch')
class TestView(View):
    def post(self, request, *args, **kwargs):
        return HttpResponse('Hello world')

32

ইন setting.pyমিডলওয়্যার আপনি কেবল অপসারণ করতে পারেন / মন্তব্য এই লাইন:

'django.middleware.csrf.CsrfViewMiddleware',

1
এটি আমার জন্য জ্যাঙ্গো ২.১ এ একটি HTTP ক্লায়েন্ট হিসাবে কার্ল ব্যবহার করে কাজ করে।
কাদামাটি

1
@xtrinch নিশ্চিত করুন যে আপনি সার্ভার প্রক্রিয়া পুরোপুরি ছাড় / পুনরায় চালু করবেন। আমি মনে করি না যে অটো-রিলেড পরিবর্তনটি নিয়েছে
বেসিক

15

জন্য জ্যাঙ্গো 2 :

from django.utils.deprecation import MiddlewareMixin


class DisableCSRF(MiddlewareMixin):
    def process_request(self, request):
        setattr(request, '_dont_enforce_csrf_checks', True)

settings.MIDDLEWAREউপযুক্ত হলে সেই মিডলওয়্যারটি অবশ্যই যুক্ত করা উচিত (উদাহরণস্বরূপ আপনার পরীক্ষার সেটিংসে)।

দ্রষ্টব্য: সেটিংটি MIDDLEWARE_CLASSESআর কল করা হয় না।


11

উত্তরটি অনুপযুক্ত হতে পারে তবে আমি আশা করি এটি আপনাকে সহায়তা করবে

class DisableCSRFOnDebug(object):
    def process_request(self, request):
        if settings.DEBUG:
            setattr(request, '_dont_enforce_csrf_checks', True)

মিডলওয়্যার এর মতো থাকা অনুরোধগুলি ডিবাগ করতে এবং উত্পাদন সার্ভারগুলিতে সিএসআরএফ চেক করতে সহায়তা করে।


হুম। জ্যাঙ্গোতে এটি চেষ্টা করেছিল 9.৯.১। পদ্ধতিটি থেকে @ এসএসআরএফ_এক্সেমিট সজ্জাটিকে সরানো হয়েছে এবং উপরের কোডটি যুক্ত করেছেন। 403 পেয়েছি কারণ কুকি সেট করা হয়নি।
ক্রেগ এস অ্যান্ডারসন

11

এখানে সমস্যাটি হ'ল সেশনআউথেন্টিকেশন তার নিজস্ব সিএসআরএফ বৈধতা সম্পাদন করে। এজন্য সিএসআরএফ মিডলওয়্যারের মন্তব্য করা হলেও আপনি সিএসআরএফ হারিয়ে যাওয়ার ত্রুটি পেয়ে যান। আপনি প্রতিটি ভিউতে @ সিএসআরএফ_মুক্ত করতে পারেন তবে আপনি যদি সিএসআরএফ অক্ষম করতে চান এবং পুরো অ্যাপ্লিকেশনের জন্য সেশন প্রমাণীকরণ পেতে চান তবে আপনি এটির মতো একটি অতিরিক্ত মিডলওয়্যার যুক্ত করতে পারেন -

class DisableCSRFMiddleware(object):

def __init__(self, get_response):
    self.get_response = get_response

def __call__(self, request):
    setattr(request, '_dont_enforce_csrf_checks', True)
    response = self.get_response(request)
    return response

আমি এই ক্লাসটি মাইএপ / মিডল.পিতে তৈরি করেছি তারপরে সেটিংস.পাইতে মিডলওয়্যারের মধ্যে এই মিডওয়্যারটি আমদানি করুন

MIDDLEWARE = [
    'django.middleware.common.CommonMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    #'django.middleware.csrf.CsrfViewMiddleware',
    'myapp.middle.DisableCSRFMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',

]

এটি ডিআরএফের সাথে জঙ্গো 1.11 এ কাজ করে


3
কেবল একটি সমাধান পোস্ট করার পরিবর্তে প্রশ্নের উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ।
থাজে

5

আপনি যদি গ্লোবাল এ এটি অক্ষম করতে চান তবে আপনি এটির মতো একটি কাস্টম মিডলওয়্যার লিখতে পারেন

from django.utils.deprecation import MiddlewareMixin

class DisableCsrfCheck(MiddlewareMixin):

    def process_request(self, req):
        attr = '_dont_enforce_csrf_checks'
        if not getattr(req, attr, False):
            setattr(req, attr, True)

তারপর এই শ্রেণীর যোগ youappname.middlewarefilename.DisableCsrfCheckকরার MIDDLEWARE_CLASSESআগে তালিকা,django.middleware.csrf.CsrfViewMiddleware


2

সিএসআরএফ দৃশ্য স্তরে প্রয়োগ করা যেতে পারে, যা বিশ্বব্যাপী অক্ষম করা যায় না

কিছু ক্ষেত্রে এটি একটি ব্যথা হলেও উম, "এটি সুরক্ষার জন্য"। সেই এএএ রেটিংগুলি ধরে রাখতে হবে।

https://docs.djangoproject.com/en/dev/ref/csrf/#contrib-and-reusable-apps


0

@ WoooHaaaa কিছু তৃতীয় পক্ষের প্যাকেজগুলি 'django.middleware.csrf.CsrfViewMiddleware' মিডওয়্যার ব্যবহার করে। উদাহরণস্বরূপ আমি জাঙ্গো-রেস্ট-ওউথ ব্যবহার করি এবং সেই জিনিসগুলি অক্ষম করার পরেও আপনার মতো আমার সমস্যা হয়। হতে পারে এই প্যাকেজগুলি আমার অনুরোধ হিসাবে আপনার অনুরোধের প্রতিক্রিয়া জানিয়েছে, কারণ আপনি প্রমাণীকরণের সাজসজ্জা এবং এই জাতীয় কিছু ব্যবহার করেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.