රේල්ස් අව්‍යාජතා ටෝකනය අවබෝධ කර ගැනීම


987

මට දැන් බොහෝ වාර ගණනක් ඇති බැවින්, රේල් පීලි වල සත්‍යතාව ටෝකනය සම්බන්ධයෙන් මම යම් යම් ගැටළු වලට මුහුණ දෙමි.

නමුත් මට ඇත්තටම අවශ්‍ය නැහැ මේ ප්‍රශ්නය විසඳා ගෙන ඉදිරියට යන්න. අව්‍යාජතා ටෝකනය තේරුම් ගැනීමට මම ඇත්තෙන්ම කැමතියි. හොඳයි, මගේ ප්‍රශ්නය නම්, ඔබට මෙම විෂය පිළිබඳ සම්පූර්ණ තොරතුරු ප්‍රභවයක් තිබේද? නැතහොත් මෙහි විස්තරාත්මකව විස්තර කිරීමට ඔබේ කාලය වැය කරනවාද?


7
මෙයද බලන්න: "(1) ඔවුන්ගේ JSON ප්‍රතිචාරයට ගූගල් සූදානම් වන්නේ ඇයි?" stackoverflow.com/questions/2669690/…
ක්ලෝයි

Answers:


1472

සිදුවන්නේ කුමක් ද

පරිශීලකයෙකු සම්පතක් නිර්මාණය කිරීමට, යාවත්කාලීන කිරීමට හෝ විනාශ කිරීමට පෝරමයක් බැලූ විට, රේල්ස් යෙදුම අහඹු ලෙස නිර්මාණය කරයි authenticity_token, සැසිය තුළ මෙම ටෝකනය ගබඩා කරයි , සහ එය පෝරමයේ සැඟවුණු ක්ෂේත්‍රයක තබයි. පරිශීලකයා පෝරමය ඉදිරිපත් කළ විට, රේල්ස් සොයන්නේ authenticity_token, එය සැසියේ ගබඩා කර ඇති එක සමඟ සංසන්දනය කරයි, ඒවා ගැලපෙන්නේ නම් ඉල්ලීම දිගටම කරගෙන යාමට අවසර දෙනු ලැබේ.

එය සිදුවන්නේ ඇයි

අව්‍යාජතා ටෝකනය සැසිය තුළ ගබඩා කර ඇති බැවින්, සේවාදායකයාට එහි වටිනාකම දැනගත නොහැක. මෙම යෙදුම තුළම ඇති පෝරමය බැලීමෙන් තොරව රේල්ස් යෙදුමකට පෝරම ඉදිරිපත් කිරීමෙන් මිනිසුන් වළක්වයි. ඔබ සේවාව A භාවිතා කරන බව සිතන්න, ඔබ සේවයට පිවිසී ඇති අතර සියල්ල හරි ය. දැන් සිතන්න ඔබ B සේවාව භාවිතා කිරීමට ගිය බවත්, ඔබ කැමති පින්තූරයක් දුටු බවත්, පින්තූරයේ විශාල ප්‍රමාණයක් බැලීමට එය තද කළ බවත් සිතන්න. දැන්, B සේවාවේ කිසියම් නපුරු කේතයක් තිබුනේ නම්, එය A සේවාවට ඉල්ලීමක් යවනු ඇත (ඔබ ලොග් වී ඇති), සහ ඉල්ලීමක් යැවීමෙන් ඔබේ ගිණුම මකා දැමීමට ඉල්ලා සිටින්න http://serviceA.com/close_account. මෙය CSRF (හරස් අඩවි ඉල්ලීම් වංචාව) ලෙස හැඳින්වේ .

A සේවාව සත්‍යතා ටෝකන භාවිතා කරන්නේ නම්, මෙම ප්‍රහාර දෛශිකය තවදුරටත් අදාළ නොවේ, මන්ද B සේවයේ ඉල්ලීමෙහි නිවැරදි සත්‍යතා ටෝකනය අඩංගු නොවන අතර ඉදිරියට යාමට ඉඩ නොදේ.

API ලියකියවිලි මෙටා ටැගය පිළිබඳ විස්තර විස්තර කරයි:

CSRF ආරක්ෂාව protect_from_forgeryක්‍රමවේදය සමඟ සක්‍රිය කර ඇති අතර , එය ටෝකනය පරික්ෂා කර සැසිය නැවත බලාපොරොත්තු වූ දේට නොගැලපේ නම් එය නැවත සකසයි. පෙරනිමියෙන් නව රේල්ස් යෙදුම් සඳහා මෙම ක්‍රමයට ඇමතුමක් ජනනය වේ. ටෝකන පරාමිතිය authenticity_tokenපෙරනිමියෙන් නම් කර ඇත. මෙම ටෝකනයේ නම සහ වටිනාකම csrf_meta_tagsHTML ශීර්ෂයට ඇතුළත් කිරීමෙන් ආකෘති ඉදිරිපත් කරන සෑම පිරිසැලසුමකටම එකතු කළ යුතුය .

සටහන්

මතක තබා ගන්න, රේල්ස් සත්‍යාපනය කරන්නේ අව්‍යාජ නොවන ක්‍රම (POST, PUT / PATCH සහ DELETE) නොවේ. සත්‍යතා ටෝකනය සඳහා GET ඉල්ලීම පරීක්ෂා නොකෙරේ. මන්ද? ලබා ගන්න ඉල්ලීම් idempotent බව හා යුතු HTTP පිරිවිතර රාජ්යයන් නිසා නොවේ නිර්මාණය, වෙනස් කිරීම, හෝ සේවාදායකය දී සම්පත් විනාශ හා ඉල්ලීම idempotent විය යුතු (ඔබ එකම විධානය වාර කිහිපයක් පවත්වා ගෙන යන්නේ නම්, ඔබ එකම ප්රතිඵලය සෑම අවස්ථාවකදීම ලබා ගත යුතු).

සැබෑ අර්ථ දැක්වීම ආරම්භයේ දී අර්ථ දක්වා ඇති පරිදි තරමක් සංකීර්ණ වන අතර වඩා හොඳ ආරක්ෂාවක් සහතික කරයි. රේල්ස් සෑම පෝරමයක් සමඟම එකම ගබඩා කළ ටෝකනය නිකුත් නොකරයි. එය සෑම විටම වෙනස් ටෝකනයක් ජනනය කර ගබඩා නොකරයි. එය සැසියකදී ගුප්ත ලේඛන හැෂ් උත්පාදනය කර ගබඩා කරන අතර නව ගුප්ත ලේඛනගත ටෝකන නිකුත් කරයි, එය පිටුවක් විදැහුම් කරන සෑම අවස්ථාවකම ගබඩා කර ඇති ඒවාට අනුරූප වේ. Request_forgery_protection.rb බලන්න .

පාඩම්

authenticity_tokenඔබගේ අවිනිශ්චිත නොවන ක්‍රම (POST, PUT / PATCH, සහ DELETE) ආරක්ෂා කිරීමට භාවිතා කරන්න . සේවාදායකයේ සම්පත් වෙනස් කළ හැකි GET ඉල්ලීම් වලට ඉඩ නොදීමට වග බලා ගන්න.


සංස්කරණය කරන්න : GET ඉල්ලීම් අනර්ථකාරී බවට @erturne විසින් කරන ලද අදහස පරීක්ෂා කරන්න . ඔහු එය මා මෙහි කළ දෙයට වඩා හොඳ ආකාරයකින් පැහැදිලි කරයි.


26
A ෆයිසාල්, එසේ නම්, ප්‍රහාරකයකුට සර්විස් ඒ සඳහා වන පෝරමයේ 'සැඟවුණු' අංගය සරලව කියවීමට / ග්‍රහණය කර ගැනීමට සහ පරිශීලකයා සඳහා ජනනය කරන ලද සුවිශේෂී ටෝකනය ලබා ගැනීමට හැකි ද? සේවා A සඳහා?
මාකමිලියන්

11
c මාකමිලියන්: සේවා A හි ඔබගේ සැසිය කවුරුහරි පැහැරගෙන ගියේ නම්, සත්‍යතා ටෝකනය ඔබව ආරක්ෂා නොකරයි. කොල්ලකරුට ඉල්ලීමක් ඉදිරිපත් කිරීමට හැකි වන අතර එය ඉදිරියට යාමට ඉඩ දෙනු ඇත.
ෆයිසාල්

12
abzabba: නිසි ටෝකනයකින් තොරව පෝරමයක් ඉදිරිපත් කරන්නේ නම් රේල්ස් විසින් ක්‍රියාකාරී පාලකය මතු කරයි :: අවලංගු සත්‍යතාව ටෝකන් ව්‍යතිරේකය. ව්‍යතිරේකයෙන් ඔබට ගලවා ගත හැකි අතර ඔබට අවශ්‍ය ඕනෑම සැකසුම් කරන්න.
ෆයිසාල්

5
re "සේවාදායකයේ සම්පත් වෙනස් කළ හැකි GET ඉල්ලීම් නොකිරීමට වග බලා ගන්න." - පෝස්ට් පමණක් ලැබීමට අදහස් කරන පාලක ක්‍රියාමාර්ග සඳහා GET ඉල්ලීම් වලට ඉඩ දිය හැකි මාර්ගවල ගැලපීම් () භාවිතා නොකිරීම මෙයට ඇතුළත් වේ
ස්ටීවන්

102
"... සහ ඉල්ලීම අවිනිශ්චිත විය යුතුය (ඔබ එකම විධානය කිහිප වතාවක් ක්‍රියාත්මක කරන්නේ නම්, සෑම විටම එකම ප්‍රති result ලය ලබා ගත යුතුය)." මෙහි සියුම් පැහැදිලි කිරීමක් පමණි. ආරක්ෂිත යන්නෙන් අතුරු ආබාධ නොමැත. Idempotent යන්නෙන් අදහස් කරන්නේ සේවාවක් කොපමණ වේලාවක් හැඳින්වුවද එකම අතුරු ආබාධයකි. අතුරු ආබාධ නොමැති නිසා සියලුම ආරක්‍ෂිත සේවාවන් සහජයෙන්ම අවිනිශ්චිතය. වත්මන් කාලීන සම්පතක් සඳහා GET ඇමතීම සෑම අවස්ථාවකම වෙනස් ප්‍රති result ලයක් ලබා දෙනු ඇත, නමුත් එය ආරක්ෂිතයි (ඒ අනුව අනන්‍යතාවයෙන් යුත්).
erturne

139

අව්‍යාජතා ටෝකනය නිර්මාණය කර ඇති අතර එමඟින් ඔබේ පෝරමය ඔබේ වෙබ් අඩවියෙන් ඉදිරිපත් කරන බව ඔබ දනී. එය ජනනය කරනු ලබන්නේ එය ඔබේ යන්ත්‍රයට පමණක් දැනගත හැකි අද්විතීය හඳුනාගැනීමක් සමඟ ධාවනය වන යන්ත්‍රයෙන් වන අතර එමඟින් හරස් අඩවි ඉල්ලීම් ව්‍යාජ ප්‍රහාර වැළැක්වීමට උපකාරී වේ.

ඔබේ AJAX ස්ක්‍රිප්ට් ප්‍රවේශය ප්‍රතික්ෂේප කරන රේල් පීලි සමඟ ඔබට අපහසුතාවයක් ඇත්නම්, ඔබට භාවිතා කළ හැකිය

<%= form_authenticity_token %>

ඔබ ඔබේ පෝරමය නිර්මාණය කරන විට නිවැරදි ටෝකනය ජනනය කිරීමට.

ප්‍රලේඛනයෙන් ඔබට ඒ ගැන වැඩි විස්තර කියවිය හැකිය .


88

CSRF යනු කුමක්ද?

අව්‍යාජතා ටෝකනය යනු හරස් අඩවි ඉල්ලීම් වංචාවට (CSRF) ප්‍රතිප්‍රහාරයකි. CSRF යනු කුමක්ද?

සැසි ටෝකන පවා නොදැන ප්‍රහාරකයෙකුට සැසි පැහැර ගැනීමට හැකි ක්‍රමයක් එයයි.

සිදුවීම :

  • ඔබේ බැංකුවේ වෙබ් අඩවියට පිවිසෙන්න.
  • ඉන්පසු ප්‍රහාරකයාගේ වෙබ් අඩවියට පිවිසෙන්න (උදා: විශ්වාසදායක සංවිධානයකින් අනුග්‍රහය දක්වන දැන්වීම).
  • ප්‍රහාරකයාගේ පිටුවට බැංකුවේ "හුවමාරු අරමුදල්" පෝරමයට සමාන ක්ෂේත්‍ර ඇතුළත් වේ.
  • ප්‍රහාරකයා ඔබගේ ගිණුම් තොරතුරු දන්නා අතර ඔබේ ගිණුමෙන් මුදල් ප්‍රහාරකයාගේ ගිණුමට මාරු කිරීමට පෙර පුරවා ඇති පෝරම ක්ෂේත්‍ර තිබේ.
  • ඔබේ බැංකුවට පෝරමය ඉදිරිපත් කරන ජාවාස්ක්‍රිප්ට් ප්‍රහාරකයාගේ පිටුවට ඇතුළත් වේ.
  • පෝරමය ඉදිරිපත් කළ විට, සැසිය ටෝකනය ඇතුළුව බැංකු වෙබ් අඩවිය සඳහා ඔබගේ කුකී බ්‍රව්සරයට ඇතුළත් වේ.
  • බැංකුව මුදල් ප්‍රහාරකයාගේ ගිණුමට මාරු කරයි.
  • පෝරමය අදෘශ්‍යමාන අයිෆ්‍රේම් එකක තිබිය හැකි බැවින් ප්‍රහාරය සිදුවූ බව ඔබ කිසි විටෙකත් නොදනී.
  • මෙය හරස් අඩවි ඉල්ලීම් වංචාව (CSRF) ලෙස හැඳින්වේ.

CSRF විසඳුම :

  • සේවාදායකයාට සේවාදායකයෙන් පැමිණි ආකෘති සලකුණු කළ හැකිය
  • සෑම පෝරමයකම සැඟවුණු ක්ෂේත්‍රයක් ලෙස අතිරේක සත්‍යාපන ටෝකනයක් අඩංගු විය යුතුය.
  • ටෝකනය අනපේක්ෂිත විය යුතුය (ප්‍රහාරකයාට එය අනුමාන කළ නොහැක).
  • සේවාදායකය එහි පිටුවල වලංගු ටෝකනයක් ලබා දෙයි.
  • පෝරමය පළ කරන විට සේවාදායකයා ටෝකනය පරික්ෂා කරයි, නිසි ටෝකනයකින් තොරව පෝරම ප්‍රතික්ෂේප කරයි.
  • උදාහරණ ටෝකනය: සේවාදායක රහස් යතුර සමඟ සැසි හඳුනාගැනීමේ සංකේතනය කර ඇත.
  • රේල් පීලි ස්වයංක්‍රීයව එවැනි ටෝකන ජනනය කරයි: සෑම ආකාරයකින්ම අව්‍යාජතා_ටෝකන් ආදාන ක්ෂේත්‍රය බලන්න.

1
මෙන්න මෙම පැහැදිලි කිරීමේම
Lutz Prechelt

මට විශ්වාස නැත නමුත්, නවීන බ්‍රව්සර් වෙනත් වසමකට අව්‍යාජ නොවන ඉල්ලීම් (POST / PUT / DELETE) යැවීමට ඉඩ දෙයිද? මම හිතන්නේ බ්‍රව්සරයේම එවැනි දේවලින් ආරක්ෂා විය යුතුයි
බෙදීම්බයිසෙරෝ

45

හරස් අඩවි ඉල්ලීම් ව්‍යාජ ප්‍රහාර (CSRF) වැළැක්වීම සඳහා සත්‍යතා ටෝකනය භාවිතා කරයි. සත්‍යතා ටෝකනය අවබෝධ කර ගැනීම සඳහා, ඔබ මුලින්ම CSRF ප්‍රහාර තේරුම් ගත යුතුය.

CSRF

ඔබ කර්තෘ යැයි සිතමු bank.com. GET ඉල්ලීමක් සමඟ වෙනත් ගිණුමකට මුදල් මාරු කිරීමට භාවිතා කරන පෝරමයක් ඔබේ වෙබ් අඩවියේ ඇත:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

හැකර්වරයෙකුට සේවාදායකයට HTTP ඉල්ලීමක් යැවිය හැකිය GET /transfer?amount=$1000000&account-to=999999, නේද?

රූප විස්තරය මෙහි ඇතුළත් කරන්න

වැරදි. හැකර් ප්‍රහාරය සාර්ථක නොවනු ඇත. සේවාදායකයා මූලික වශයෙන් සිතනු ඇත?

හහ්? මාරුවීමක් ආරම්භ කිරීමට උත්සාහ කරන මේ පුද්ගලයා කවුද? එය ගිණුමේ හිමිකරු නොවේ, එය නිසැකවම.

සේවාදායකයා මෙය දන්නේ කෙසේද? session_idඉල්ලුම්කරු සත්‍යාපනය කරන කුකියක් නොමැති නිසා .

ඔබගේ පරිශීලක නාමය සහ මුරපදය සමඟ ඔබ පුරනය වන විට, සේවාදායකය session_idඔබගේ බ්‍රව්සරයේ කුකියක් සකසයි . ඒ ආකාරයෙන්, ඔබගේ පරිශීලක නාමය සහ මුරපදය සමඟ එක් එක් ඉල්ලීම සත්‍යාපනය කිරීමට ඔබට අවශ්‍ය නැත. ඔබගේ බ්‍රව්සරය session_idකුකිය යවන විට , සේවාදායකයා දනී:

ඔහ්, ඒ ජෝන් ඩෝ. මිනිත්තු 2.5 කට පෙර ඔහු සාර්ථකව පුරනය විය. ඔහු යන්න හොඳයි.

හැකර් කෙනෙකු සිතිය හැකිය:

හ්ම්. සාමාන්‍ය HTTP ඉල්ලීමක් ක්‍රියාත්මක නොවනු ඇත, නමුත් මට එම session_idකුකියට අත තැබිය හැකි නම් , මම රන්වන් වනු ඇත.

පරිශීලක බ්‍රව්සරයේ bank.comවසම සඳහා කුකීස් සමූහයක් ඇත. පරිශීලකයා bank.comවසමට ඉල්ලීමක් කරන සෑම අවස්ථාවකම , සියලු කුකීස් එවනු ලැබේ. session_idකුකිය ඇතුළුව .

ඒ නිසා හැකර් ලබා ගත හැකි නම්, ඔබ ඔහුගේ ගිණුමට මුදල් මාරු කර යවයි බව ලබා ගන්න ඉල්ලීමක් කළ, ඔහු සාර්ථක විය කැමතියි. එසේ කිරීමට ඔහු ඔබව රැවටෙන්නේ කෙසේද? හරස් අඩවි ඉල්ලීම් වංචාව සමඟ.

ඇත්තෙන්ම එය ඉතා සරල ය. හැකර්ට ඔබව ඔහුගේ වෙබ් අඩවියට පිවිසිය හැකිය. ඔහුගේ වෙබ් අඩවියේ, ඔහුට පහත රූප ටැගය තිබිය හැකිය:

<img src="http://bank.com/transfer?amount=$1000000&account-to=999999">

පරිශීලක බ්‍රව්සරය එම රූප ටැගය හරහා පැමිණි විට, එය එම යූආර්එල් වෙත GET ඉල්ලීමක් කරනු ඇත. ඔහුගේ බ්‍රව්සරයෙන් ඉල්ලීම පැමිණෙන බැවින්, එය සම්බන්ධ සියලු කුකීස් ඒ සමඟ යවනු ඇත bank.com. පරිශීලකයා මෑතකදී පුරනය වී ඇත්නම් bank.com... session_idකුකිය සැකසෙනු ඇති අතර, සේවාදායකයා සිතන්නේ පරිශීලකයා ඩොලර් 1,000,000 ක් 999999 ගිණුමට මාරු කිරීමට අදහස් කරන බවයි!

රූප විස්තරය මෙහි ඇතුළත් කරන්න

හොඳයි, භයානක අඩවි වෙත නොයන්න, ඔබ හොඳින් වනු ඇත.

එය ප්‍රමාණවත් නොවේ. කවුරුහරි එම රූපය ෆේස්බුක් වෙත පළ කර එය ඔබේ බිත්තියේ දිස්වන්නේ නම් කුමක් කළ යුතුද? XSS ප්‍රහාරයකින් ඔබ පිවිසෙන වෙබ් අඩවියකට එය එන්නත් කළහොත් කුමක් කළ යුතුද?

එය එතරම් නරක නැත. අවදානමට ලක්විය හැක්කේ GET ඉල්ලීම් පමණි.

සත්‍ය නොවේ. POST ඉල්ලීමක් යවන පෝරමයක් ගතිකව ජනනය කළ හැකිය. ආරක්ෂාව පිළිබඳ රේල්ස් මාර්ගෝපදේශයේ උදාහරණය මෙන්න :

<a href="http://www.harmless.com/" onclick="
  var f = document.createElement('form');
  f.style.display = 'none';
  this.parentNode.appendChild(f);
  f.method = 'POST';
  f.action = 'http://www.example.com/account/destroy';
  f.submit();
  return false;">To the harmless survey</a>

සත්‍යතා ටෝකනය

ඔබට ApplicationControllerමෙය ඇති විට :

protect_from_forgery with: :exception

මෙය:

<%= form_tag do %>
  Form contents
<% end %>

මේ සඳහා සම්පාදනය කර ඇත:

<form accept-charset="UTF-8" action="/" method="post">
  <input name="utf8" type="hidden" value="&#x2713;" />
  <input name="authenticity_token" type="hidden" value="J7CBxfHalt49OSHp27hblqK20c9PgwJ108nDHX/8Cts=" />
  Form contents
</form>

විශේෂයෙන් පහත සඳහන් දෑ ජනනය වේ:

<input name="authenticity_token" type="hidden" value="J7CBxfHalt49OSHp27hblqK20c9PgwJ108nDHX/8Cts=" />

CSRF ප්‍රහාර වලින් ආරක්ෂා වීම සඳහා, ඉල්ලීමක් සමඟ යවන ලද සත්‍යතා ටෝකනය රේල්ස් නොදකිනවා නම්, එය ඉල්ලීම ආරක්ෂිත යැයි නොසැලකේ.

මෙම ටෝකනය කුමක්දැයි ප්‍රහාරකයෙකු දැන ගන්නේ කෙසේද? පෝරමය ජනනය කරන සෑම අවස්ථාවකම අහඹු ලෙස වෙනස් අගයක් ජනනය වේ:

රූප විස්තරය මෙහි ඇතුළත් කරන්න

හරස් අඩවි ස්ක්‍රිප්ටින් (XSS) ප්‍රහාරයක් - එය එසේ ය. නමුත් එය වෙනස් දවසක් සඳහා වෙනස් අවදානමක් ඇත.


45

වළක්වා ගත හැකි අවම ප්‍රහාර උදාහරණය: CSRF

evil.comපහත දැක්වෙන ආකෘති පත්‍රය ඉදිරිපත් කිරීමට මගේ වෙබ් අඩවියේ මම ඔබට ඒත්තු ගන්වමි:

<form action="http://bank.com/transfer" method="post">
  <p><input type="hidden" name="to"      value="ciro"></p>
  <p><input type="hidden" name="ammount" value="100"></p>
  <p><button type="submit">CLICK TO GET PRIZE!!!</button></p>
</form>

සැසි කුකීස් හරහා ඔබ ඔබේ බැංකුවට ලොග් වී ඇත්නම්, එවිට කුකීස් යවනු ලබන අතර ඔබ නොදැනුවත්වම මාරුවීම් සිදු කරනු ඇත.

CSRF ටෝකනය ක්‍රියාත්මක වූයේ එයයි:

  • පෝරමය ආපසු ලබා දුන් GET ප්‍රතිචාරය සමඟ රේල්ස් ඉතා දිගු අහඹු සැඟවුණු පරාමිතියක් යවයි
  • බ්‍රව්සරය POST ඉල්ලීම කළ විට, එය පරාමිතිය දිගේ යවනු ඇති අතර සේවාදායකයා එය පිළිගන්නේ එය ගැලපෙන්නේ නම් පමණි

එබැවින් සත්‍ය බ්‍රව්සරයක ඇති පෝරමය මෙසේ වනු ඇත:

<form action="http://bank.com/transfer" method="post">
  <p><input type="hidden" name="authenticity_token" value="j/DcoJ2VZvr7vdf8CHKsvjdlDbmiizaOb5B8DMALg6s=" ></p>
  <p><input type="hidden" name="to"                 value="ciro"></p>
  <p><input type="hidden" name="ammount"            value="100"></p>
  <p><button type="submit">Send 100$ to Ciro.</button></p>
</form>

මේ අනුව, authenticity_tokenපරාමිතිය නොයැවීම නිසා මගේ ප්‍රහාරය අසාර්ථක වනු ඇති අතර එය විශාල අහඹු අංකයක් බැවින් මට එය අනුමාන කළ හැකි ක්‍රමයක් නොමැත.

මෙම වැළැක්වීමේ තාක්ෂණය සමමුහුර්ත ටෝකන් රටාව ලෙස හැඳින්වේ .

එකම ප්‍රභව ප්‍රතිපත්තිය

නමුත් ප්‍රහාරකයා ජාවාස්ක්‍රිප්ට් සමඟ ඉල්ලීම් දෙකක් කළහොත්, එකක් ටෝකනය කියවීමට සහ දෙවැන්න මාරුවීමට නම්?

එය වලක්වා ගැනීමට සමමුහුර්ත ටෝකන රටාව පමණක් ප්‍රමාණවත් නොවේ!

මා විසින් පැහැදිලි කර ඇති පරිදි එකම ප්‍රභව ප්‍රතිපත්තිය ගලවා ගැනීමට පැමිණෙන්නේ මෙතැනදීය: /security/8264/why-is-the-same-origin-policy-so-important/72569# 72569

රේල්ස් ටෝකන යවන ආකාරය

ආවරණය: රේල් පීලි: csrf_meta_tag ක්‍රියා කරන්නේ කෙසේද?

මූලික වශයෙන්:

  • form_tagGET පෝරමයක් නොවේ නම් HTML සහායකයින් ඔබ වෙනුවෙන් පෝරමයට සැඟවුණු ක්ෂේත්‍රයක් එක් කිරීමට කැමතියි

  • AJAX ස්වයංක්‍රීයව ගනුදෙනු කරනු ලබන්නේ jquery-ujs විසිනි , එය metaඔබගේ ශීර්ෂයට එකතු කරන ලද මූලද්‍රව්‍යවල ටෝකනය කියවයි csrf_meta_tags(පෙරනිමි අච්චුවේ ඇත), එය කරන ඕනෑම ඉල්ලීමකට එය එක් කරයි.

    යල්පැනගිය හැඹිලි කැබලි වල ස්වරූපයෙන් ටෝකනය යාවත්කාලීන කිරීමට uJS උත්සාහ කරයි.

වෙනත් වැළැක්වීමේ ප්‍රවේශයන්


ස්තූතියි, නමුත් CSRF ටෝකනය කියවීමට නොහැකි වීම සඳහා එකම මූල ප්‍රතිපත්තියක් මත විශ්වාසය තැබීම පිළිබඳ ඔබේ අදහස පළමුවෙන්ම දෝෂ සහිත බව පෙනේ. ඉතින් මුලින්ම ඔබ කියන්නේ ඔබට වෙනත් ප්‍රභවයකට තැපැල් කළ හැකි නමුත් එයින් කියවිය නොහැකි, අමුතු බවක් පෙනේ, නමුත් එය නිවැරදි යැයි මම සිතමි, නමුත් ඔබට පිටුවක් ලබා ගැනීම සමඟ රූපයක් හෝ ස්ක්‍රිප්ට් ටැගයක් එන්නත් කර ප්‍රතිචාරය විග්‍රහ කිරීමට හසුරුවන්නෙකු සම්බන්ධ කළ හැකිය. ඔව් එය ලබා ගන්න?
bjm88

j bjm88 පිටපත එන්නත් කරන්නේ කොහේද? ඔබේ වෙබ් අඩවියේද, නැතහොත් පහර දුන් අඩවියේද? වෙබ් අඩවියට පහර දෙන්නේ නම්, ස්ක්‍රිප්ට් එන්නත් කිරීමට ඉඩ දීම ප්‍රසිද්ධ ආරක්ෂක දෝෂයක් වන අතර එය effectively ලදායී ලෙස වෙබ් අඩවිය උකස් කරයි. සෑම වෙබ් අඩවියක්ම ආදාන සනීපාරක්ෂාව හරහා එයට එරෙහිව සටන් කළ යුතුය. පින්තූර සඳහා, ඒවා ප්‍රහාරයක් සඳහා භාවිතා කරන්නේ කෙසේදැයි මම නොදනිමි. වෙබ් අඩවියට පහර දීමේදී: කියවීමට ඉඩ දීම සඳහා ඔබට ඔබගේ බ්‍රව්සරය වෙනස් කළ හැකි අතර එමඟින් ස්වයංක්‍රීයව උකස් තබන්න :-) නමුත් යහපත් බ්‍රව්සර් එය පෙරනිමියෙන් වළක්වයි, එය උත්සාහ කර බලන්න.
සිරෝ සැන්ටිලි 郝海东 冠状 病 六四 事件 事件

39

මෙම Authenticity Tokenරේල් පීලි 'කිරීමට ක්රමවේදයක් වේ වැළැක්වීම හරස් අඩවි ඉල්ලීම කිරීම් (CSRF හෝ XSRF) ප්රහාර එල්ල' ' .

සරලව කිවහොත්, ඔබේ වෙබ් යෙදුමට PUT / POST / DELETE (අන්තර්ගතය වෙනස් කළ හැකි ක්‍රම) ඉල්ලීම් සේවාදායකයාගේ බ්‍රව්සරයෙන් සාදන ලද අතර එය සාදන ලද කුකියකට ප්‍රවේශය ඇති තෙවන පාර්ශවයකින් (ප්‍රහාරකයෙකුගෙන්) නොවේ. සේවාදායකයාගේ පැත්තෙන්.


34

Authenticity Tokenරේල්ස් 3.0+ හි ඔබට භාවිතා කළ හැකි බැවින් එය ඉතා වැදගත් වේ

 <%= token_tag nil %>

නිර්මාණය කිරීමට

<input name="authenticity_token" type="hidden" value="token_value">

ඕනෑම තැනක


මෙය මට ප්‍රයෝජනවත් විය. මම ඇත්ත වශයෙන්ම XSSපිවිසුම් පිටුවේ කිරීමට උත්සාහ කළේ අශෝභන අරමුණු සඳහා නොව, පෙර පුරවා ඇති පරිශීලක නාමයෙන් නව සැසියක් නිර්මාණය කිරීමට ය. දැන් මම දන්නවා මට පාවිච්චි කරන්න පුළුවන් කියලා value="token_value".
මයිකල්

27

එකම සේවාදායකයාගෙන් ඔබට සමගාමී ඉල්ලීම් කිහිපයක් තිබේ නම් අව්‍යාජභාවය ටෝකන් යාන්ත්‍රණය තරඟකාරී තත්වයන්ට හේතු විය හැක. මෙම තත්වය තුළ ඔබේ සේවාදායකයාට එකක් පමණක් තිබිය යුතු විට බහු සත්‍යතා ටෝකන ජනනය කළ හැකි අතර, පෙර ටෝකනය පෝරමයකින් ලබා ගන්නා සේවාදායකයා එහි ඊළඟ ඉල්ලීම මත අසමත් වනු ඇත, මන්ද සැසි කුකී ටෝකනය නැවත ලියනු ලැබේ. මෙම ගැටළුව පිළිබඳ ලිවීමක් මෙහි ඇති අතර එය සුළුපටු විසඳුමක් නොවේ: http://www.paulbutcher.com/2007/05/race-conditions-in-rails-session-and-how-to-fix-them/


11

ක්‍රම authenticity_tokenඅවශ්‍ය තැන

authenticity_token පෝස්ට් කිරීම, තැබීම සහ මකා දැමීම වැනි අයිඩම්පොටෙන්ට් ක්‍රමවේදයන් සඳහා අවශ්‍ය වේ, මන්ද අයිඩම්පොටෙන්ට් ක්‍රම දත්ත වලට බලපාන බැවිනි.

එය අවශ්‍ය වන්නේ ඇයි

නපුරු ක්‍රියාවන් වලක්වා ගැනීම අවශ්‍ය වේ. සත්‍යාපනය_තෝකනය සැසිවාරයේ ගබඩා කර ඇති අතර, සම්පත් නිර්මාණය කිරීම හෝ යාවත්කාලීන කිරීම සඳහා වෙබ් පිටුවල පෝරමයක් සාදන සෑම අවස්ථාවකම සත්‍යතා ටෝකනයක් සැඟවුණු ක්ෂේත්‍රය තුළ ගබඩා වන අතර එය සේවාදායකයේ පෝරමය සමඟ යවනු ලැබේ. ක්‍රියාව ක්‍රියාත්මක කිරීමට පෙර පරිශීලකයා විසින් එවන ලද සත්‍යතාව_ටෝකනය authenticity_tokenසැසිය තුළ ගබඩා කර ඇති බව හරස් පරීක්‍ෂා කරනු ලැබේ. නම් authenticity_tokenඑම නම් ක්රියාවලිය එසේ එය ක්රියා කරන්නේ නැහැ දිගටම වේ.


3
ඇත්තටම එය ප්‍රතිවිරුද්ධ දෙයක් නොවේද? GET යනු එහි තත්වය ඇමතීමෙන් පද්ධතියේ තත්වය වෙනස් නොවිය යුතු අතර PUT POST සහ DELETE ක්‍රියාපද පද්ධති තත්වය වෙනස් කරන බැවින් ඒවා ක්‍රියා විරහිත ක්‍රියා පද නොවේ. IE: අවිනිශ්චිත ක්‍රම නොමැති විට සත්‍යතාව_ටෝකනය අවශ්‍ය වේ.
ජීන්-තියෝ

2
@ ජීන්-ඩවුබ්, උමා: idempotent යන්නෙන් අදහස් කරන්නේ දෙවරක් කළහොත් ක්‍රියාව සිදුවන්නේ එක් වරක් පමණක් බවයි. GET, PUT සහ DELETE යනු ප්‍රබල ය : w3.org/Protocols/rfc2616/rfc2616-sec9.html මෙහි ඇති ප්‍රධාන දේපල අනන්‍යතාවය නොවේ, නමුත් ක්‍රමවේදය වෙනස් වුවහොත් හෝ දත්ත වෙනස් නොවන්නේ නම් “ආරක්ෂිත ක්‍රමය” හෝ නැත.
සිරෝ සැන්ටිලි 郝海东 冠状 病 六四 事件 事件

6

සත්‍යාපන_ටෝකනය යනු කුමක්ද?

මෙය අහඹු ලෙස භාවිතා කරන රේල් පීලි යෙදුමකි, පරිශීලකයා වෙනත් යෙදුමකින් හෝ වෙබ් අඩවියකින් නොව යෙදුම් පිටුවෙන් ක්‍රියාවක් ඉල්ලා සිටින බව හෝ සිදු කරන බවට වග බලා ගන්න.

සත්‍යාපන_ටෝකනයක් අවශ්‍ය වන්නේ ඇයි?

ඔබගේ යෙදුම හෝ වෙබ් අඩවිය හරස් අඩවි ඉල්ලීම් වංචාවෙන් ආරක්ෂා කිරීමට.

පෝරමයකට සත්‍යාපන_ටෝකනයක් එකතු කරන්නේ කෙසේද?

ඔබ form_for tag භාවිතා කරමින් පෝරමයක් ජනනය කරන්නේ නම් සත්‍යාපනය_ටෝකනය ස්වයංක්‍රීයව එකතු වේ නම් ඔබට භාවිතා කළ හැකිය <%= csrf_meta_tag %>.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.