এইচটিএমএল ফর্মের ক্রিয়া বৈশিষ্ট্যের জন্য খালি URL ব্যবহার করা কি ভাল অনুশীলন? (কর্ম = "")


279

আমি ভাবছি যে কেউ বর্তমান পৃষ্ঠায় ফিরে পোস্ট করতে ফাঁকা এইচটিএমএল ফর্ম ক্রিয়া ব্যবহার করে কোনও "সেরা অনুশীলন" প্রতিক্রিয়া জানাতে পারে কিনা।

নেই একটি পোস্ট জিজ্ঞাসা কি একটি ফাঁকা এইচটিএমএল ফর্ম কর্ম এখানে আছে মত কিছু পৃষ্ঠা এই এক সুপারিশ এটা জরিমানা কিন্তু আমি জানি মানুষ কি মনে চাই।


7
"সেরা-অনুশীলন" ট্যাগটি প্রয়োগ করার জন্য পরামর্শ দেওয়া হচ্ছে।
মরগান

দ্বিগুণ নিশ্চিত করার জন্য, ক্রিয়াটি ফাঁকা ছেড়ে যান, বা কেবল কোনও ক্রিয়া উল্লেখ করবেন না (যেমন <form name="xyz" >)। এটি নিজে থেকে অ্যাকশন জমা দেবে।
lwpro2

11
ক্রিয়া বৈশিষ্ট্যটি অন্তর্ভুক্ত না করে পৃষ্ঠাটি আইফ্রেমে ক্লিকজ্যাকিং আক্রমণগুলিতে খোলে , যেমন কোনও আক্রমণকারী আপনার পৃষ্ঠাকে একটি আইফ্রেমে আবৃত করে এবং আইফ্রেমে ইউআরএল একটি ফর্ম ফিল্ড হিসাবে একই নামে একটি ক্যোয়ারী পরম অন্তর্ভুক্ত করে। ফর্মটি জমা দেওয়া হলে, ক্যোয়ারী মানটি ডাটাবেসে সন্নিবেশ করা হয়, সুতরাং ব্যবহারকারীর সনাক্তকারী তথ্য (ইমেল, ঠিকানা, ইত্যাদি) আপস করা হয়েছে।
পল সুইট

তাহলে, বর্তমান পৃষ্ঠায় কোনও ফর্ম জমা দেওয়ার বৈধ, নিরাপদ উপায় কী?
কোস্টা

উত্তর:


268

আপনি করতে পারেন সেরা জিনিসটি ক্রিয়া বৈশিষ্ট্যটি পুরোপুরি ছেড়ে দেওয়া leave যদি আপনি এটি ছেড়ে দেন তবে ফর্মটি নথির ঠিকানায়, অর্থাৎ একই পৃষ্ঠায় জমা দেওয়া হবে।

এটি খালি রেখে দেওয়াও সম্ভব, এবং যে কোনও ব্রাউজার বাস্তবায়নকারী এইচটিএমএলের ফর্ম জমা দেওয়ার অ্যালগরিদম এটিকে নথির ঠিকানার সমতুল্য হিসাবে বিবেচনা করবে, এটি মূলত এটি কারণ এটি ব্রাউজারগুলি বর্তমানে কীভাবে কাজ করে:

8.কর্ম আজ্ঞাবহদের উপাদান চল করি কর্ম

9.যদি ক্রিয়াটি খালি স্ট্রিং হয় তবে ক্রিয়াকলাপটি দস্তাবেজের ঠিকানা হতে দিন ।

দ্রষ্টব্য: এই পদক্ষেপটি আরএফসি 3986 এর ইচ্ছাকৃত লঙ্ঘন , যার জন্য এখানে বেস URL টি প্রক্রিয়াকরণ প্রয়োজন। এই লঙ্ঘনটি উত্তরাধিকার বিষয়বস্তুর সাথে সামঞ্জস্যের জন্য একটি ইচ্ছা দ্বারা অনুপ্রাণিত হয়। [RFC3986]

এটি অবশ্যই সমস্ত বর্তমান ব্রাউজারগুলিতে কাজ করে তবে কিছু পুরানো ব্রাউজারগুলিতে প্রত্যাশা অনুযায়ী কাজ করতে পারে না ( " ব্রাউজারগুলি একটি খালি অ্যাকশন =" "গুণাবলী " দিয়ে অদ্ভুত জিনিসগুলি করে )) এজন্যই স্পেক লেখকদের এটিকে খালি রাখা থেকে নিরুৎসাহিত করে :

actionএবং formactionবিষয়বস্তু বৈশিষ্ট্যাবলী, যদি নির্দিষ্ট, যে একটি একটি মান থাকতে হবে বৈধ অ ফাঁকা URL সম্ভাব্য শূণ্যস্থান দ্বারা বেষ্টিত


12
সম্ভবত আপনার উত্তর (এটি প্রায় তিন বছর action=""
কেটে গেছে

2
ধন্যবাদ এটি সম্ভবত পরিবর্তন হয়নি। আমি যা বলেছি তার উত্তরকে আরও ভালভাবে প্রতিস্থাপন করার জন্য আমি আমার উত্তর পরিবর্তন করেছি।
মার্টারে

73

প্রকৃতপক্ষে, বর্তমান এইচটিএমএল 5 খসড়ার ফর্ম জমা সাবমিশনটি অনুমতি দেয় না action=""। এটা জল্পনা-বিরোধী।

actionএবং formactionবিষয়বস্তু বৈশিষ্ট্যাবলী, যদি নির্দিষ্ট, যে একটি বৈধ একটি মান থাকতে হবে খালি নয় এমন URL টি সম্ভাব্য শূণ্যস্থান দ্বারা বেষ্টিত। (সামনে জোর দাও)

মরেটরের উত্তরে উদ্ধৃত বিভাগটি বাস্তবায়নের প্রয়োজনীয়তা , লেখক নয় । লেখকদের অবশ্যই লেখকের প্রয়োজনীয়তা অনুসরণ করতে হবে। এই স্পেসিফিকেশনটি কীভাবে পড়বেন তা উদ্ধৃত করতে :

বিশেষত, কনফারেন্সের প্রয়োজনীয়তাগুলি প্রযোজকদের ক্ষেত্রে প্রযোজ্য, উদাহরণস্বরূপ লেখক এবং তারা যে নথিগুলি তৈরি করেন এবং কনফারেন্সের প্রয়োজনীয়তাগুলি যা গ্রাহকদের ক্ষেত্রে প্রযোজ্য, উদাহরণস্বরূপ ওয়েব ব্রাউজারগুলি। তারা যা প্রয়োজন তার দ্বারা তারা পৃথক হতে পারে: একজন প্রযোজকের উপর প্রয়োজনীয়তার জন্য অনুমতি দেওয়া হয় তা বলা হয়, অন্যদিকে কোনও গ্রাহকের প্রয়োজনে বলা হয় যে সফ্টওয়্যার কীভাবে আচরণ করবে।

এইচটিএমএল 4 - যা একটি খালি ইউআরএলকে অনুমতি দেয় - থেকে পরিবর্তনটি করা হয়েছিল কারণ " ব্রাউজারগুলি একটি শূন্য action=""বৈশিষ্ট্যের সাথে অদ্ভুত জিনিসগুলি করে "। পরিবর্তনের কারণ বিবেচনা করে এটি এইচটিএমএল 4 এ না করাই সবচেয়ে ভাল।


actionফর্মটি কীভাবে দস্তাবেজের ঠিকানায় জমা দিতে হবে তা নির্দেশের পুরোপুরি অনুপস্থিতির অনুমতি দেয় ? এটি বলে মনে হয়, যেহেতু এটি "নির্দিষ্ট করে থাকলে" says
কেরিক

2
@ কেরিক হ্যাঁ, আমি বিশ্বাস করি যে এইচটিএমএল 5 অ্যাকশন বৈশিষ্ট্যটি পুরোপুরি বাদ দিতে দেয় এবং এটিকে খালি স্ট্রিংয়ে ডিফল্ট করে। এইচটিএমএল 4 করেনি, এটি প্রয়োজনীয় হিসাবে কর্মটি নির্দিষ্ট করে।
ডারোবার্ট

আমি @ কেরিকের সাথে একমত, এটি ক্রিয়া বৈশিষ্ট্য বাদ দেওয়ার অনুমতি দেওয়া হয়েছে। বর্তমান এইচটিএমএল 5 খসড়াটি পড়লে মনে হয় খালি স্ট্রিং অনুমোদিত নয় তবে বৈশিষ্ট্যের অনুপস্থিতি অনুমোদিত is তবে যে কোনও ক্ষেত্রে, সামঞ্জস্যের কারণে, আমি আপনাকে সর্বদা "ক্রিয়া" বৈশিষ্ট্য অন্তর্ভুক্ত করে একটি বৈধ নন-খালি ইউআরএল (ভাল অভ্যাস সর্বদা সর্বোত্তম উপায়) দিয়ে পূরণ করার পরামর্শ দিচ্ছি।
সার্ফার 2

একটি সম্ভাব্য গোচা: কৌণিক জেএস কোনও ক্রিয়া বৈশিষ্ট্য ছাড়াই ফর্ম জমা দেওয়া আটকাবে। সম্ভবত কোনও সাধারণ সমস্যা নয়, তবে আমাদের উত্তরাধিকার সাইটের অংশগুলি কেন ভাঙতে শুরু করল তা বুঝতে সময় লাগল।
অসমর

18

ক্রিয়া বৈশিষ্ট্যটি অন্তর্ভুক্ত না করে পৃষ্ঠাটি আইফ্রেমে ক্লিকজ্যাকিং আক্রমণগুলিতে খোলে যা কয়েকটি সাধারণ পদক্ষেপ জড়িত:

  • একজন আক্রমণকারী আপনার পৃষ্ঠাকে একটি আইফ্রেমে আবৃত করে
  • Iframe URL এ একটি ফর্ম ক্ষেত্রের মতো একই নামের একটি ক্যোয়ারী প্যারাম অন্তর্ভুক্ত রয়েছে
  • ফর্মটি জমা দেওয়া হলে, কোয়েরি মানটি ডাটাবেসে প্রবেশ করানো হয়
  • ব্যবহারকারীর সনাক্তকারী তথ্য (ইমেল, ঠিকানা, ইত্যাদি) আপস করা হয়েছে

তথ্যসূত্র


2
আইফ্রেমে ইউআরএলটিতে জিইটি প্যারামিটারগুলি থাকে না, যখন ফর্মগুলি সাধারণত পোস্ট ব্যবহার করে জমা দেওয়া হয়? সুতরাং যদি সাইটটি কেবলমাত্র পোস্টের পরামিতিগুলি নিয়ে কাজ করে তবে সমস্যা হওয়া উচিত নয় তাই না? কমপক্ষে আমি সাধারণত ফর্মগুলি প্রক্রিয়া করার সময় পিএইচপি-তে $ _POST অ্যারে ব্যবহার করি।
কলমারিয়াস

2
@ ক্যালমারিয়াস হ্যাঁ, এটি এড়াতে $_POSTপরিবর্তে ব্যবহার করুন $_REQUEST। যদি ফ্রেমওয়ার্ক কোড $_REQUESTব্যবহার করে তবে একটি আইফ্রেমে বুস্টার ব্যবহার করুন ।
পল সুইট

17

এটি এইচটিএমএল 5 সহ বৈধতা দেবে।

<form action="#">

4
আমি এটি চেষ্টা করে দেখিনি, তবে ধারণাগতভাবে কি জমা দেওয়ার পরে পৃষ্ঠার শীর্ষে স্ক্রোলটি হবে না?
ম্যাট মিচেল

2
আপনি ব্যবহার করতে পারবেন না action="."?
s427

3
কর্ম = "?" খুব ভাল কাজ করে। এটি স্ট্রিং ডেটা এবং কোয়েরি ছাড়াই বর্তমান পৃষ্ঠায় বৈধতা দেয় এবং নির্দেশ করে।
ক্রিস ব্রসকি

5
action="."সাধারণ ক্ষেত্রে এটি একটি খারাপ ধারণা। মত একটি URL example.com/loginনিছক ম্যাপ করা হয় example.com/
টর্স্টেন ব্রোঞ্জার

1
এই উত্তরটি কেবলমাত্র বৈধ যদি ব্যবহারকারী পৃষ্ঠার শীর্ষে স্ক্রোল করতে চান।
buts

9

এইচটিএমএল 5 সমর্থন করে action=""না তাই এটি করবেন না। খারাপ অভ্যাস।

পরিবর্তে আপনি যদি পুরোপুরি ক্রিয়াটিকে সম্পূর্ণরূপে প্রত্যাখ্যান করেন তবে এটি ডিফল্টরূপে একই পৃষ্ঠায় জমা দেবে, আমি বিশ্বাস করি এটি সর্বোত্তম অনুশীলন:

<form>This will submit to the current page</form>

আপনি যদি পিএইচপি ব্যবহার করে ফর্মটি সঙ্কুচিত করে থাকেন তবে আপনি নিম্নলিখিতগুলি বিবেচনা করতে পারেন। এখানে এটি সম্পর্কে আরও পড়ুন.

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

বিকল্পভাবে আপনি #মনে মনে ভাল্লুক ব্যবহার করতে পারেন যদিও এটি কোনও অ্যাঙ্করের মতো কাজ করবে এবং পৃষ্ঠার শীর্ষে স্ক্রোল করবে।

<form action="#">

বুঝতে চান আপনি কেন এই উত্তরটি কেউ ভোট দিয়েছেন?
buts

আপনি ক্রিয়া বৈশিষ্ট্যটি বাদ দেন, ফর্মটি কি এখনও শোষণের জন্য উন্মুক্ত লিঙ্কটির ফ্রিজ পৃষ্ঠায় বিস্তারিত রয়েছে?
রিচার্ড ইয়ং

@ রিচার্ড ইউং দুঃখিত, আমি আপনার প্রশ্নটি বুঝতে পারি না। দয়া করে পুনঃব্যবহার করুন।
buts

1
$ _SERVER ["PHP_SELF"] ভেরিয়েবল হ্যাকাররা ব্যবহার করতে পারেন। যদি আপনার পৃষ্ঠায় পিএইচপি_এসএলএফ ব্যবহার করা হয় তবে কোনও ব্যবহারকারী একটি স্ল্যাশ (/) এবং তারপরে কার্যকর করার জন্য কিছু ক্রস সাইট স্ক্রিপ্টিং (এক্সএসএস) কমান্ড দিতে পারে। আপনি যদি ক্রিয়া বৈশিষ্ট্যটি বাদ দেন, আপনি কি এখনও এইটির জন্য ঝুঁকিপূর্ণ?
রিচার্ড ইয়ং

হ্যা, তুমি. ক্রিয়া বৈশিষ্ট্যটি ক্লায়েন্টের পক্ষে আবার যুক্ত করা যেতে পারে এবং পছন্দের কোনও মান দেওয়া যেতে পারে। তবে htmlspecialchars()ফাংশনটি ব্যবহার করা লোকদের থেকে আপনার পিএইচপি স্ক্রিপ্ট আপনার বিরুদ্ধে ব্যবহার করা থেকে বিরত রাখে।
buts

4

আমি সাধারণত অ্যাকশন = "" ব্যবহার করি যা এক্সএইচটিএমএল বৈধ এবং URL এ জিইটি ডেটা ধরে রাখে।


4
কদাচিৎ, তবে উদাহরণস্বরূপ, আমার ফোরামে আমার ইউআরএল থাকবে: থ্রেড.এফপি? আইডি = 12 এবং পৃষ্ঠা = 6 এবং মন্তব্য যুক্ত করার জন্য পৃষ্ঠার নীচে একটি পোষ্ট ফর্ম রয়েছে এবং পিএইচপি করার জন্য আমার জিইটি ডেটা প্রয়োজন কোন থ্রেডটিতে মন্তব্য যুক্ত করতে হবে তা জানে।
Juddling

20
GET হ'ল ফর্মগুলির জন্য ডিফল্ট পদ্ধতি - এটি খুব কমই খারাপ জিনিস ;-) w3.org/TR/html401/interact/forms.html#adef- স্মৃতি
নিকফিটজ

5
ফর্মগুলিতে জিইটি ব্যবহার করা একটি খারাপ জিনিস। ব্যবহারকারী যদি জমা দেওয়ার পরে পৃষ্ঠাটি পুনরায় লোড করে তবে অনিচ্ছাকৃত পরিণতি হতে পারে। তবে যদি কোনও পোষ্ট ব্যবহার করা হয়, ব্রাউজারটি একই তথ্য পুনরায় জমা দেওয়ার বিষয়ে সতর্ক করবে।
উইল শেপার্ড 14 ই

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

3
পিএস সমস্ত ব্রাউজার ব্যবহারকারীর পোষ্ট ডেটা (যেমন অপেরা) পুনরায় জমা দেওয়ার বিষয়ে সতর্ক করে না
মাইক

4

আমি মনে করি ফর্মটি কোথায় পোস্ট করেছে তা স্পষ্টভাবে জানিয়ে দেওয়া ভাল । আপনি যদি সম্পূর্ণরূপে নিরাপদ থাকতে চান তবে ফর্মটি এটিকে আবার জমা দিতে চাইলে ক্রিয়া বৈশিষ্ট্যে একই ফর্মটি প্রবেশ করুন। যদিও মূলধারার ব্রাউজারগুলি ""একই পৃষ্ঠায় মূল্যায়ন করে, আপনি গ্যারান্টি দিতে পারবেন না যে মূল-মূলধারার ব্রাউজারগুলি হবে।

এবং অবশ্যই, জডলিংয়ের মতো জিইটি ডেটা সহ পুরো ইউআরএল পয়েন্ট আউট করে।


2

শুধু ব্যবহার

?

<form action="?" method="post" enctype="multipart/form-data" name="myForm" id="myForm">

এটি এইচটিএমএল 5 মান লঙ্ঘন করে না।


আমি ডাউনভোট করি নি তবে আপনার পদ্ধতিটি সমস্ত প্যারামগুলি বাদ দেবে get। নিম্নলিখিত url এর একটি ফর্মটি ভেঙে যাবে example.com/update_user?user_id=1কারণ ফর্মটি জমা হবেexample.com/update_user?
ভিক্কি

1

আমি ক্লাসিক এএসপির সাথে কাজ করার সময় এটি অনেক করতাম। সার্ভার-সাইডের বৈধতা যখন ইনপুট (AJAX এর দিন আগে) প্রয়োজন ছিল তখন আমি সাধারণত এটি ব্যবহার করি। আমি যে প্রধান অঙ্কনটি দেখছি তা হ'ল এটি ফাইল পর্যায়ে প্রোগ্রামিং লজিককে উপস্থাপনা থেকে আলাদা করে না।


1
কেন না? আমি মনে করি এটি সংযুক্ত নেই। আমি একই পৃষ্ঠায় একটি ফর্ম ডেটা পোস্ট করতে পারি এবং নিয়ামক এবং দর্শনের যথাযথ পৃথকীকরণের সাথে এই পৃষ্ঠাটি তৈরি করতে পারি।
মার্কাস

1

আমি এ্যাকশন অ্যাট্রিবিউটটি মোটেও নির্দিষ্ট করে না ব্যবহার করি। আমার কাঠামোর নকশাটি সমস্ত পৃষ্ঠাগুলি ঠিক একই ঠিকানায় ফিরে আসার জন্য এটি হয়। তবে আজ আমি সমস্যাটি আবিষ্কার করেছি। কখনও কখনও আমি কিছু ব্যাকগ্রাউন্ড কল করার জন্য অ্যাকশন অ্যাট্রিবিউট মান ধার করি (আমার ধারণা কিছু লোক তাদের নাম AJAX রাখে)। সুতরাং আমি দেখতে পেয়েছি যে ক্রিয়াকলাপের বৈশিষ্ট্যটি নির্দিষ্ট না করা থাকলে আইই ক্রিয়া বৈশিষ্ট্যের মানটি খালি রাখে। এটি আমার বোঝার ক্ষেত্রে কিছুটা অদ্ভুত, যেহেতু যদি কোনও ক্রিয়া বৈশিষ্ট্য নির্দিষ্ট না করা হয় তবে জাভাস্ক্রিপ্টের প্রতিরূপটি কমপক্ষে অপরিজ্ঞাত হতে হবে। যাইহোক, আমার বক্তব্যটি আপনি সর্বোত্তম অনুশীলনটি বেছে নেওয়ার আগে আপনাকে আরও প্রসঙ্গটি বুঝতে হবে, যেমন আপনি জাভাস্ক্রিপ্টে বৈশিষ্ট্যটি ব্যবহার করবেন কি না।

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