একটি REST এপি কল এ একটি পাসওয়ার্ড রেখে Put


31

ধরুন আমার কাছে একটি REST এপিআই রয়েছে যা পাসওয়ার্ড সেট / রিসেট করতে ব্যবহৃত হয়। আসুন ধরে নেওয়া যাক এটি কোনও এইচটিপিএস সংযোগের জন্য কাজ করে। কল পাসথে সেই পাসওয়ার্ডটি না রাখার কি কোনও যুক্তিসঙ্গত কারণ আছে, এটিও বলি যে আমি এটি BASE64 এ এনকোড করব?

একটি উদাহরণ হ'ল এটির মতো একটি পাসওয়ার্ড পুনরায় সেট করা:

http://www.example.com/user/joe/resetpassword/OLDPASSWD/NEWPASSWD

আমি বুঝলাম BASE64 কোনও এনক্রিপশন নয়, তবে আমি কেবল এই ক্ষেত্রে কাঁধে পাসওয়ার্ডটি পাসওয়ার্ডকে সুরক্ষিত করতে চাই।


61
আপনি কি জিইটি-তে পার্শ্ব প্রতিক্রিয়া পরামর্শ দিচ্ছেন? এটি ঠিক সেখানে একটি প্রোটোকল লঙ্ঘন।
এসবেন স্কোভ পেডারসেন

27
এটি সত্যিই বিশ্রাম নয় কারণ resetpassword/OLDPASSWD/NEWPASSWDকোনও উত্স নয়। এটি একটি প্রক্রিয়া একটি প্রার্থনা। আপনার কোনও URL এ স্টাফ করার দরকার নেই।
usr

5
@ এসবেন: কে বলেছে এটি জিইটি? ওপি কখনও তা বলেনি।
ডাগলিনিগুলি

3
সত্য, তিনি প্রশ্নে নেই। তবে নেচের জবাব সম্পর্কে তাঁর মন্তব্য বলেছে "অনুমান করি আমাকে সর্বোপরি POST ব্যবহার করতে হবে", তাই আমরা ধরে নিতে পারি যে তিনি মূলত জিইটি সম্পর্কে ইচ্ছা করেছিলেন / জিজ্ঞাসা করেছিলেন। কোনটি, এসবেন উল্লেখ করেছেন যে এটি একটি খারাপ জিনিস। জিইটি পড়া উচিত।
মাউগ

উত্তর:


76

একটি ভাল সার্ভার ইউআরএল (প্রায়শই '?' এর পরে পরিবর্তনশীল অংশ ব্যতীত) এর কাছে প্রেরিত সমস্ত অনুরোধগুলিকে লগ করে, উত্স আইপি, এক্সিকিউশন সময় ... আপনি কি সত্যিই এই লগটি (অ্যাডমিনের বিস্তৃত গোষ্ঠীর দ্বারা সম্ভাব্যভাবে পড়া) চান তা রাখতে চান? পাসওয়ার্ড হিসাবে সমালোচনা সুরক্ষিত তথ্য? বেস 64 তাদের বিরুদ্ধে কোনও স্টপার নয়।


42
এটি পোষ্ট ব্যবহারের সবচেয়ে বড় কারণ নয়। এটি একটি সুরক্ষার কারণ। তবে
এসবেল অলরেডি

2
@ বার্টফ্রিডারিচস: এবং ব্রাউজারের ইতিহাস URL টি মনে রাখবে। এবং আপনি চেষ্টা করতে চান এমন সমস্ত পাসওয়ার্ডের জন্য একটি লিঙ্ক রয়েছে এমন একটি ওয়েব পৃষ্ঠা তৈরি করে এবং বেনামে গুচ্ছ পাসওয়ার্ড দিয়ে চেষ্টা করছেন
গুগলবোটকে

2
"তবে এসবেল অলরেডি নোট মন্তব্যে ডেকেছিলেন, জিইটি-র সাথে রাষ্ট্র পরিবর্তন করা এই ধরনের রেস্ট সার্ভিসের লঙ্ঘন" আমিও এই মন্তব্যটি লক্ষ্য করেছি, তবে কোথায় দেখছে যে এটি জিইটি অনুরোধ ছিল তা কোথাও বলছেন না। আপনি কোনও ইউআরআইতে তথ্য এম্বেড করতে পারেন এবং এখনও এটি পোস্ট করতে পারেন। এটি সত্যিই বিশ্রামের নয় , যেহেতু ইউআরআই আসলে কোনও সংস্থার নামকরণ করে না।
জোশুয়া টেলর

হাই, ভাল উত্তর, তবে আমি "? 'এর পরে পরিবর্তনশীল অংশ ছাড়া" এর সাথে একমত নই ... অনেকগুলি আছে যারা পুরো URL টি সঞ্চয় করে !!!
ডাগলিনিগুলি

2
"একটি জিইটি-র সাথে রাষ্ট্র পরিবর্তন করা এই জাতীয় বিশ্রাম পরিষেবার লঙ্ঘন" - আসুন আরআরইএসটিতে খুব বেশি ধরা পড়ি না। একটি পান তার সঙ্গে রাষ্ট্র পরিবর্তন লঙ্ঘন HTTP- র
ড্যান এলিস

69

আপনি যা প্রস্তাব করছেন তা নিরাপদও নয় বা বিশ্রামেরও নয়।

@ নেট ইতিমধ্যে লগ সহ সমস্যাটি উল্লেখ করেছে, তবে এইচটিটিপি দ্বারা আপনি যে পাসওয়ার্ড প্রেরণ করছেন তা দেখিয়ে দিচ্ছেন যে কোনও ধরণের ওয়্যার স্নিফার বা ম্যান-ইন-দ্য-মধ্যবর্তী আক্রমণে পাসওয়ার্ড ক্যাপচার করা একেবারে ক্ষুদ্র করে তুলেছে।

আপনি যখন আরইএসটি ব্যবহার করে একটি জিইটি অনুরোধ করবেন তখন ইউআরএল-এর বিভিন্ন উপাদান আরও সূক্ষ্ম দানযুক্ত উপাদান উপস্থাপন করে। আপনার ইউআরএলটি পড়েছে যে আপনি কোনও ওলডিপিএএসডাব্লুডির একটি NEWPASSWD অংশটি পুনরায় পাসওয়ার্ডের অংশ হিসাবে ফিরিয়ে দিচ্ছেন। এটি কোনও ধরণের অর্থপূর্ণ বোঝায় না। তথ্য সংরক্ষণের জন্য জিইটিগুলি ব্যবহার করা উচিত নয়।

আপনার এমন কিছু করা উচিত:

POST https://www.example.com/user/joe/resetpassword/
{oldpasswd:[data], newpasswd:[data]}

আপনি ডেটা লিখছেন বলে পোস্ট করুন এবং https কারণ আপনি এটি স্নিগ্ধ করতে চান না।

(এটি আসলে লো-বার সুরক্ষা you আপনার নিখুঁত ন্যূনতম হওয়া উচিত))


2
এর অর্থ কি ক্লায়েন্টের পাশে পাসওয়ার্ডগুলি হ্যাশ করা হবে না? এটি কি প্রস্তাবিত?
রোয়ান ফ্রিম্যান

1
দ্রষ্টব্য: এটি পাসওয়ার্ডের প্রয়োজনীয়তা (দৈর্ঘ্য ইত্যাদি) মঞ্জুরি দেবে না। এটি আপনার ক্ষেত্রে সমস্যা হতে পারে না, যদিও এটি একটি ঘন ঘন সুরক্ষা অনুশীলন এবং কিছু সময় কিছু সংস্থার দ্বারা প্রয়োজনীয় by
পল ড্রাগন

8
আপনি একটি নতুন রেকর্ড তৈরি করছেন না তবে বিদ্যমান রেকর্ডটি আপডেট করছেন (সাধারণত), সুতরাং এটি পোস্টের চেয়ে পুট হওয়া উচিত।

4
এটি খুব বিশ্রামের নয়। রিসেটপ্যাসওয়ার্ডটি কোনও সংস্থান নয় যা উপ-সংস্থানটি ছেড়ে দেয়। তবে /user/joe/passwordএটি আরও ভাল তবে অনুকূল নয়।
ঘূর্ণি

12
@ ক্যামিলস্ট্যাপগুলি না, আপনি ব্যবহার করতে পারবেন না PUT, কারণ আদর্শবান PUT। কিন্তু যখন পাসওয়ার্ড থেকে পরিবর্তিত হয়েছে secretথেকে supersecretসফলভাবে, তারপর একই অনুরোধ দ্বিতীয় সময় ব্যর্থ হবে, তাই POSTএখানে সঠিক। অবশ্যই, @ হর্লউইন যেমন বলেছে, এই সংস্থানটির ভাল নামকরণ করা হয়নি।
রেসিডিয়াম

60

প্রস্তাবিত প্রকল্পটির বিভিন্ন ক্ষেত্রে সমস্যা রয়েছে।

নিরাপত্তা

ইউআরএল পাথগুলি প্রায়শই লগ হয়; পথে আনহ্যাশড পাসওয়ার্ড স্থাপন করা দুর্বল অভ্যাস।

HTTP- র

অনুমোদন / অনুমোদনের তথ্য অনুমোদনের শিরোনামে উপস্থিত হওয়া উচিত। বা সম্ভবত, ব্রাউজার-ভিত্তিক স্টাফের জন্য, কুকির শিরোনাম।

বিশ্রাম

resetpasswordআপনার ইউআরএল এর মতো ক্রিয়াগুলি সাধারণত একটি প্রতিনিধিত্বমূলক রাষ্ট্র স্থানান্তর দৃষ্টান্তের একটি পরিষ্কার লক্ষণ। একটি ইউআরএল একটি সংস্থান প্রতিনিধিত্ব করা উচিত। এটি জিইটি মানে কি resetpassword? নাকি ডিলেট করবেন?

এপিআই

এই স্কিমটির সর্বদা পূর্ববর্তী পাসওয়ার্ডটি জানা দরকার। আপনি সম্ভবত আরও কিছু ক্ষেত্রে অনুমতি দিতে চাইবেন; যেমন পাসওয়ার্ড হারিয়ে গেছে।


আপনি বেসিক বা ডাইজেস্ট প্রমাণীকরণ ব্যবহার করতে পারেন , যা স্কিমগুলি ভাল বোঝা যায়।

PUT /user/joe/password HTTP/1.0
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Content-Type: text/plain
Host: www.example.com

NEWPASSWD

এটি পথে অতি সংবেদনশীল তথ্য রাখে না এবং এটি HTTP এবং REST সম্মেলন অনুসরণ করে।

যদি আপনাকে অনুমোদনের কিছু অন্য মোডের অনুমতি দেওয়ার প্রয়োজন হয় (যেমন পাসওয়ার্ডটি পুনরায় সেট করতে কোনও টোকেন যাচাই করা চ্যানেলের মাধ্যমে প্রেরণ করা হয়েছে), আপনি অন্য কিছু পরিবর্তন না করেই কেবল অন্য কোনও অনুমোদন শিরোনাম ব্যবহার করতে পারেন।


4

সুরক্ষা ছাড়াও, এর সাথে সমস্যা হ'ল এটি খুব বিশ্রামের উপায় নয়।

OLDPASSWDএবং NEWPASSWDআপনার রিসোর্স হায়ারার্কির কোনও কিছুর পক্ষে দাঁড়ান না এবং আরও খারাপ, অপারেশনটি আদর্শবান নয়।

তাই আপনি যদি শুধুমাত্র ব্যবহার করতে পারেন POSTআপনার ক্রিয়া হিসেবে, এবং আপনি আপনার সম্পদ পথে দুই পাসওয়ার্ড অন্তর্ভুক্ত করা উচিত নয়।


1
আপনি একটি নতুন রেকর্ড তৈরি করছেন না তবে বিদ্যমান রেকর্ডটি আপডেট করছেন (সাধারণত), সুতরাং এটি পোস্টের চেয়ে পুট হওয়া উচিত।

2
@ ক্যামিলস্টেপস যদি এটি কেবল পাসওয়ার্ডটি সেট করা থাকে তবে তা হতে পারে। তবে সম্ভবত যেহেতু পুরানো পাসওয়ার্ডটিও যাচাই করা দরকার, এটি অপারেশনটিকে অ-আদর্শহীন করে তোলে এবং তাই PUTক্রিয়া হিসাবে অযোগ্য ঘোষণা করে। এটি নিয়ে কাজ করতে আবার প্রাণবন্ত হতে পারে PUTতবে বর্তমান রূপে এটি হয় না।
বিজিকলপ

ওলডিপিএসএসডাব্লুডি হ'ল প্রমাণীকরণের তথ্য এবং URL- এ মোটেই থাকা উচিত নয়।

অগত্যা নয়, প্রমাণীকরণের উপরে পুরানো পাসওয়ার্ড স্পষ্টভাবে জিজ্ঞাসা করা সাধারণ অভ্যাস।
বিজিকলপ

3

সমস্যাটি হ'ল আপনার অনুরোধগুলিতে সরল পাঠ্য পাসওয়ার্ডগুলি এড়ানো। বিশ্রামের ওয়েবসওয়ারিসের প্রয়োজনীয়তা পূরণের জন্য দুটি বিকল্প রয়েছে।

1. ক্লায়েন্ট পাশ হ্যাশিং

  • আমি অনুমান করি আপনি যেমন পাসওয়ার্ড যেমন হ্যাশ (পাসওয়ার্ড + লবণের) সংরক্ষণ করছেন
  • আপনি ক্লায়েন্টের পাশে লবণ দিয়ে নতুন পাসওয়ার্ডটি হ্যাশ করতে পারেন
  • এর অর্থ: ক্লায়েন্টের পাশে একটি নতুন লবণ তৈরি করুন, একটি হ্যাশ তৈরি করুন যেমন হ্যাশ (নিউপ্যাসওয়ার্ড + নিউসাল্ট)
  • নতুন তৈরি হ্যাশ প্লাস লবণ আপনার বিশ্রামের ওয়েব সার্ভিসে প্রেরণ করুন
  • পুরানো পাসওয়ার্ডটি হ্যাশ হিসাবেও প্রেরণ করুন (ওল্ডপ্যাসওয়ার্ড + ওল্ডসাল্ট)

2. এনক্রিপশন

  • / ওটক / জন এর মতো ব্যবহারকারীর জন্য "ওয়ান টাইম কী" (ওটক) সংস্থান তৈরি করুন
  • এই সংস্থানটি একটি নিরাপদ এলোমেলো অনন্য ওয়ান টাইম কী প্রদান করে, যেমন kbDlJbmNmQ0Y0SmRHZC9GaWtRMW0ycVJpYzhMcVNZTWlMUXN6ZWxLdTZESFRs এবং একটি অনন্য আইডি যেমন 95648915125
  • আপনার বিশ্রামদায়ক ওয়েবসার্চিকে পরবর্তী রক্ষিত যোগাযোগের জন্য 95648915125 আইডি সহ এই র্যান্ডম ওটকে সংরক্ষণ করতে হবে
  • আপনার নতুন ও পুরাতন পাসওয়ার্ডটি ওটকের সাথে এনক্রিপ্ট করুন যেমন এইএস (সুরক্ষার কারণে আপনি পুরানো এবং নতুন পাসওয়ার্ডের জন্য দুটি পৃথক ওটক ব্যবহার করতে হবে)
  • 95648915125 আইডি সহ আপনার পরিবর্তন পাসওয়ার্ড রিসোর্কে এনক্রিপ্ট করা পাসওয়ার্ডগুলি প্রেরণ করুন
  • একটি ওটক এবং আইডি সংমিশ্রণটি কেবল একবারে কাজ করার অনুমতি দেওয়া হয়, সুতরাং আপনাকে পাসওয়ার্ড দেওয়ার পরে সেই সংমিশ্রণটি মুছতে হবে
  • সম্ভাব্য আরও ভাল বিকল্প: বেসিক-আথ দ্বারা বর্তমান / পুরানো পাসওয়ার্ড প্রেরণ করুন।

দ্রষ্টব্য: এইচটিটিপিএস উভয় বিকল্পের জন্য প্রয়োজনীয়!


1
আমি কেন পাসওয়ার্ড এক্সচেঞ্জ (ওটিকে দিয়ে আপনার এনক্রিপশন স্কিম, এবং এইচটিটিপিএস) ডাবল-এনক্রিপ্ট করব? এইচটিটিপিএস দ্বারা আচ্ছাদিত নয় এমন আক্রমণকারী ভেক্টরটি এখানে কী?
বার্ট ফ্রেডেরিচস 14

1
একমাত্র উদ্দেশ্য হ'ল সম্ভাব্য সার্ভার লগগুলি এড়ানো। এইচটিটিপিএস অনুরোধের বডি (উদাহরণস্বরূপ প্লেইন্টেক্সট নতুন পাসওয়ার্ড সহ) লগইন করা যায় যদিও এইচটিটিপিএস ব্যবহৃত হয়। অন্যান্য সম্ভাব্য আক্রমণ হ'ল একটি স্ব-স্বাক্ষরিত শংসাপত্রের ব্যবহার যা বিশেষত অভ্যন্তরীণ উদ্দেশ্যে ব্যবহৃত হয়।
maz258

2

পাসওয়ার্ড-রিসেট অপারেশনের বৈশিষ্ট্যগুলি কী কী?

  1. এটা কিছু পরিবর্তন।
  2. এটিতে সেট করা একটি মান রয়েছে।
  3. কেবলমাত্র কিছু লোককে এটি করার অনুমতি দেওয়া হয়েছে (ব্যবহারকারী, একজন প্রশাসক বা হয়, সম্ভবত এটি কীভাবে করতে পারে সে সম্পর্কে বিভিন্ন বিধি দ্বারা)।

পয়েন্ট ১ এর অর্থ এখানে আপনি জিইটি ব্যবহার করতে পারবেন না, আপনাকে পাসওয়ার্ড পরিবর্তনগুলি পরিচালনা করে এমন একটি উত্স প্রতিনিধিত্ব করে এমন কোনও ইউআরআই-তে পাসওয়ার্ড-পরিবর্তন অপারেশনকে উপস্থাপন করে এমন কিছু পোস্ট করতে হবে, বা পাসওয়ার্ডের প্রতিনিধিত্বকারী কোনও ইউআরআই-তে নতুন পাসওয়ার্ড উপস্থাপন করা বা কিছু উপস্থাপন করার জন্য কিছু রাখা উচিত (উদাঃ ব্যবহারকারী) যার পাসওয়ার্ডটি একটি বৈশিষ্ট্য।

সাধারণত আমরা পোস্ট করতাম, কমপক্ষে না কারণ এটি বিশ্রী হতে পারে এমন কোনও জিনিস রাখা যা আমরা পরে পেতে পারি না এবং অবশ্যই আমরা পাসওয়ার্ডটি পেতে পারি না।

পয়েন্ট 2 সুতরাং পোস্ট করা আছে যা নতুন পাসওয়ার্ড উপস্থাপন তথ্য হতে হবে।

পয়েন্ট 3 এর অর্থ হল আমাদের অনুরোধটি অনুমোদনের দরকার হবে, যার অর্থ হ'ল ব্যবহারকারী যদি বর্তমান ব্যবহারকারী হয় তবে আমাদের বর্তমান পাসওয়ার্ডটি প্রমাণ করতে আমাদের প্রয়োজন হবে (যদিও বর্তমান পাসওয়ার্ডটি প্রয়োজনীয়ভাবে গ্রহণ করা প্রয়োজন নয়, যেমন, হ্যাশ-ভিত্তিক চ্যালেঞ্জ এটি না পাঠিয়ে জ্ঞান প্রমাণ করার জন্য ব্যবহৃত হয়েছিল)।

ইউআরআই এর তাই <http://example.net/changeCurrentUserPassword>বা কিছু হতে হবে <http://example.net/users/joe/changePassword>

আমরা সিদ্ধান্ত নিতে পারি যে আমরা বর্তমান পাসওয়ার্ডটি POST ডেটার পাশাপাশি সাধারণ অনুমোদনের ব্যবস্থায়ও ব্যবহার করতে চাই।

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