কোয়েরি স্ট্রিং প্যারাম এবং লুকানো প্যারামগুলি সহ একটি জিইটি ফর্ম জমা দেওয়া অদৃশ্য হয়ে যায়


231

এই ফর্মটি বিবেচনা করুন:

<form action="http://www.blabla.com?a=1&b=2" method="GET">
    <input type="hidden" name="c" value="3" /> 
</form>

এই ফর্মটি জমা দেওয়ার সময় (একটি জিইটি ফর্ম) প্যারামিটারগুলি অ এবং বি অদৃশ্য হয়ে যায়। এর কোন কারণ আছে কি? এই আচরণ এড়ানো কোন উপায় আছে?


3
আপনার ক্রিয়া উপাদানটি ত্রুটিযুক্ত।
এড্রিয়ান গডং

এগুলি নিখোঁজ হওয়া উচিত নয়, তাই আমি মনে করি আমাদের আপনার ফর্মটি দেখা দরকার।
UnkwnTech

2
হাই, এখানে সম্পূর্ণ ফর্মটি রয়েছে, আপনি কেবল এই ফর্মটি দিয়ে এইচটিএমএল তৈরি করতে পারেন এবং আমি দেখতে পাচ্ছি যে ক্রিয়াকলাপে আমি পরামিতিগুলি পাস করছি তা হ'ল: <ফর্ম ক্রিয়া = " উদাহরণ. com?e=4&f=5 " পদ্ধতি = "জিইটি"> <ইনপুট টাইপ = "লুকানো" নাম = "একটি" মান = "1" /> <ইনপুট টাইপ = "লুকানো" নাম = "বি" মান = "2" /> <ইনপুট টাইপ = "লুকানো" নাম = "সি" মান = "3" /> <ইনপুট টাইপ = "জমা" /> </

1
যাইহোক, আপনি কি জানেন যে আপনি ক্রিয়া মানটির একটি শেষ উদ্ধৃতিটি মিস করছেন? মূল বিষয়টি পুরোপুরি বাদ দিয়ে, তবে ...
জয়

আমি এখানে জাভাস্ক্রিপ্ট ব্যবহার করে একটি সম্ভাব্য কাজ পোস্ট করেছি: স্ট্যাকওভারফ্লো
জেনি ও'রিলি

উত্তর:


263

গোপন পরামিতিগুলি কি এটি দিয়ে শুরু করার জন্য নয় ...?

<form action="http://www.example.com" method="GET">
  <input type="hidden" name="a" value="1" /> 
  <input type="hidden" name="b" value="2" /> 
  <input type="hidden" name="c" value="3" /> 
  <input type="submit" /> 
</form>

অ্যাকশন ইউআরএলে থাকা কোনও বিদ্যমান ক্যোয়ারী স্ট্রিং ধরে রেখে আমি কোনও ব্রাউজারে গণনা করব না।

স্পেসিফিকেশন হিসাবে ( আরএফসি 1866 , পৃষ্ঠা 46; এইচটিএমএল 4.x বিভাগ 17.13.3) লিখেছেন:

যদি পদ্ধতিটি "পেতে" হয় এবং ক্রিয়াটি একটি HTTP ইউআরআই হয়, ব্যবহারকারী এজেন্ট ক্রিয়াটির মান নেয়, একটি app যোগ করে? ' এটিতে, তারপরে "অ্যাপ্লিকেশন / x-www-form-urlencoded" সামগ্রী প্রকারটি ব্যবহার করে এনকোডযুক্ত ফর্ম ডেটা সেট সংযোজন করা হয়।

হতে পারে যে কেউ প্রশ্ন-চিহ্ন এবং পরামিতিগুলি এম্বেড করতে অ্যাকশন-ইউআরএলকে শতাংশ-এনকোড করতে পারে এবং তারপরে সকলের ব্রাউজারগুলি সেই ইউআরএলটিকে এটি হিসাবে ছেড়ে দেবে আশা করে (এবং সার্ভারটি এটিও বুঝতে পেরেছিল তা প্রমাণ করে) one's তবে আমি কখনই তার উপর নির্ভর করতাম না।

যাইহোক: এটি গোপন না থাকা ফর্ম ক্ষেত্রে আলাদা নয়। পোস্টের জন্য ক্রিয়াকলাপ URL টি যদিও একটি কোয়েরি স্ট্রিং ধরে রাখতে পারে।


71

এইচটিএমএল 5 এ এটি প্রতি-অনুশীলনমূলক আচরণ।

Http://www.w3.org/TR/2011/WD-html5-20110525/association-of-controls-and-forms.html#form-submission-algorithm দেখুন

"৪.১০.২২.৩ ফর্ম জমা দেওয়ার অ্যালগরিদম" দেখুন, পদক্ষেপ ১.. জিআরটি ফর্মের ক্ষেত্রে কোনও ক্যোরির স্ট্রিং সহ কোনও HTTP / s ইউআরআইতে ফর্মের ক্ষেত্রে:

গন্তব্যটিকে এমন একটি নতুন ইউআরএল করুন যা এর <query>উপাদানটিকে কোয়েরি দ্বারা প্রতিস্থাপিত করা হয়েছে (যদি উপযুক্ত হয় তবে একটি ইউ + 003F ক্যোস্টিয়ান মার্ক চিহ্নটি (?) যোগ করা হয়) বাদে কর্মের সমান Let

সুতরাং, আপনার ব্রাউজারটি আপনার ইউআরআইয়ের বিদ্যমান "? ..." অংশটি ট্র্যাশ করবে এবং এটি আপনার ফর্মের উপর ভিত্তি করে একটি নতুন দিয়ে প্রতিস্থাপন করবে।

এইচটিএমএল ৪.০১-তে, অনুমানটি অবৈধ ইউআরআই তৈরি করে - বেশিরভাগ ব্রাউজারগুলি যদিও এটি আসলে করেনি ..

Http://www.w3.org/TR/html401/interact/forms.html#h-17.13.3 দেখুন , চতুর্থ ধাপ - ইউআরআই একটি থাকবে? সংযুক্ত, এমনকি যদি এটি ইতিমধ্যে একটি থাকে।


এর অর্থ: ?অ্যাকশন ইউআরএল এর পিছনে থাকা সমস্ত কিছু মুছে ফেলা হবে? তাহলে কী, যদি অ্যাকশন url এর জিইটি প্যারামিটারে লক্ষ্য থাকে, যেখানে ফর্মটি প্রক্রিয়া করা উচিত? পছন্দ: action="index.php?site=search"। আমি নিশ্চিত নই, যদি লুকানো ইনপুট ক্ষেত্রগুলিতে জিইটি প্যারামিটার স্থাপন করা godশ্বরের ধারণা।
বান্ডার

প্রতি স্পেক @ এক্সফয়েড বলতে কী বোঝ?
অমিতিদিমি

@ আমিনীনাডিমি: এর অর্থ "স্পেসিফিকেশন অনুসারে"।
পুনরাবৃত্তিমূলক

14

আপনি যা করতে পারেন তা হ'ল জিইটি তথ্যযুক্ত টেবিলে একটি সাধারণ ফোরচ ach উদাহরণস্বরূপ পিএইচপি:

foreach ($_GET as $key => $value) {
    echo("<input type='hidden' name='$key' value='$value'/>");
}

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

16
এই কোডটিতে এক্সএসএস বাগটি স্থির না হওয়া পর্যন্ত ডাউনভোটিং।
spookylukey

1
এই উত্তরটি একটি অনুরূপ সমাধান সরবরাহ করে তবে এক্সএসএসের পক্ষে উপযুক্ত নয়।
vvzh

এটি অ্যারে প্যারামিটারগুলি পরিচালনা করে না
অ্যান্ড্রু

5

আপনি দুটি আইটেম (ক এবং খ) অন্তর্ভুক্ত করা উচিত হিসাবে লুকানো ইনপুট উপাদান পাশাপাশি সি।


হ্যাঁ, অবশ্যই সম্ভব হলে আমি এটি করতাম। তবে আসুন আমি জিজ্ঞাসা স্ট্রিং এবং লুকানো ইনপুটগুলিতে আমার কাছে প্যারামিটার রেখেছি, আমি কী করতে পারি?

আমি মনে করি আপনার একমাত্র বিকল্প হল ক্যোরি স্ট্রিংয়ের নাম / মান জোড় পার্স করা এবং লুকানো ইনপুট ক্ষেত্রগুলি উত্পাদন করা। আপনি যদি পৃষ্ঠা এবং ইউআরএলটির প্রসঙ্গে আরও কিছুটা বর্ণনা করেন তবে আমরা একটি কার্যনির্বাহী সমাধান প্রস্তাব করতে সক্ষম হতে পারি।
বার্নহার্ড হফম্যান

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

1

আমার খুব অনুরূপ সমস্যা হয়েছিল যেখানে ফর্ম ক্রিয়াকলাপের জন্য আমার এমন কিছু ছিল:

<form action="http://www.example.com/?q=content/something" method="GET">
   <input type="submit" value="Go away..." />&nbsp;
</form>

বোতামটি ব্যবহারকারীকে সাইটে নিয়ে আসবে, তবে ক্যোয়ারী তথ্যটি অদৃশ্য হয়ে গেল যাতে ব্যবহারকারী পছন্দসই সামগ্রী পৃষ্ঠাটির পরিবর্তে হোম পৃষ্ঠায় অবতরণ করে। আমার ক্ষেত্রে সমাধানটি ছিল কোয়েরি ছাড়াই ইউআরএল কীভাবে কোড করা যায় তা ব্যবহারকারীকে কাঙ্ক্ষিত পৃষ্ঠায় পাবেন। এই ক্ষেত্রে আমার টার্গেটটি একটি দ্রুপাল সাইট ছিল, সুতরাং এটি কার্যকর হিসাবে দেখা গেল /content/something। আমি একটি নোড নম্বর (যেমন /node/123) ব্যবহার করতে পারে ।


0

যদি আপনার কাজের প্রয়োজন হয়, যেহেতু এই ফর্মটি তৃতীয় পক্ষের সিস্টেমে স্থাপন করা যেতে পারে তবে আপনি এপাচি মোড_উইরাইটটি এভাবে ব্যবহার করতে পারেন:

RewriteRule ^dummy.link$ index.php?a=1&b=2 [QSA,L]

তাহলে আপনার নতুন ফর্মটি দেখতে এইরকম হবে:

<form ... action="http:/www.blabla.com/dummy.link" method="GET">
<input type="hidden" name="c" value="3" /> 
</form>

এবং অ্যাপাচি কোয়েরিতে তৃতীয় প্যারামিটার যুক্ত করবে


-3

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

"তবে বলি যে আমার কাছে ক্যোরিয় স্ট্রিং এবং লুকানো ইনপুটগুলিতে পরামিতি রয়েছে, আমি কী করতে পারি?" আপনি যা করতে পারেন তা হ'ল ত্রুটিটি ঠিক করা। ফাঁসানোর মতো নয়, এটি জিজ্ঞাসার মতোই কিছুটা, "তবে আমি বলতে পারি যে আমার ইউআরএল স্ল্যাশগুলির পরিবর্তে শতভাগ চিহ্ন ব্যবহার করে, আমি কী করব?" একমাত্র সম্ভাব্য উত্তরটি হ'ল, আপনি URL টি ঠিক করতে পারেন।


এই পুরো উত্তরটি প্রযুক্তিগতভাবে সঠিক ("এটির ভুল, তাই এটি ঠিক করুন") তবে কোনও কাজে আসেনি। ওপি ইতিমধ্যে জানে যে কিছু ভুল আছে, এবং এখানে এটি কীভাবে ঠিক করবেন তা জিজ্ঞাসা করছেন।
জেসন

আমি দুঃখিত, এটা পরিষ্কার ছিল না? "আপনি কোনও ফর্মের ক্রিয়াকলাপে পরামিতিগুলি অন্তর্ভুক্ত করতে পারবেন না।" এটি ঠিক করতে, ফর্মটির ক্রিয়া মান থেকে পরামিতিগুলি সরান।
জয়

@ জায়ে সমস্যাটি স্পষ্টভাবে যে ব্যবহারকারীকে থাকার জন্য ইউআরএল প্যারামিটারগুলির প্রয়োজন, সুতরাং "তাদের অপসারণ" বললে কোনও উপকার হয় না
চক লে বাট

@ চকলেবট বলছেন "তবে আমার এই কাজটি করা উচিত যা কাজ করে না" বলতে কোনও দরকারী জিনিস নয়। যদি কেউ আমাকে বলে, "আমি রেডিওর নকটি ঘুরিয়ে রাখি তবে আমার গাড়িটি চলবে না", তবে আমি যে প্রতিক্রিয়াটি ভাবতে পারি তা কেবল এটিই বলে, "রেডিওর নকটি বাঁকানো গাড়িটি চলাচল করে না You আপনাকে পাল্টাতে হবে ইগনিশন কী এবং গ্যাসের প্যাডেলটিতে চাপ দিন " উত্তর দেওয়ার জন্য, "তবে রেডিওর নকটি ঘুরিয়ে দিয়ে গাড়িটি আমার চালিত করা দরকার" একটি অনুচিতিক প্রতিক্রিয়া। এটি কাজ করে না। এটি কাজ করবে না।
জয়

-3

এটি ইফেক্সের উপরের পোস্টের প্রতিক্রিয়াতে:

যদি ইউআরএলটিতে ইতিমধ্যে আপনি যে রূপটি পরিবর্তন করতে চান তা ধারণ করে, তবে এটি আবার লুকানো ক্ষেত্র হিসাবে যুক্ত করা হয়।

ইউআরএলে সদৃশ ভারগুলি প্রতিরোধ করার জন্য এখানে সেই কোডটির একটি পরিবর্তন রয়েছে:

foreach ($_GET as $key => $value) {
    if ($key != "my_key") {
        echo("<input type='hidden' name='$key' value='$value'/>");
    }
}

-4
<form ... action="http:/www.blabla.com?a=1&b=2" method ="POST">
<input type="hidden" name="c" value="3" /> 
</form>

অনুরোধের পদ্ধতিটি 'জিইটি' এর পরিবর্তে 'পোস্টে' পরিবর্তন করুন।


-4

আমি সাধারণত কিছু লিখি:

foreach($_GET as $key=>$content){
        echo "<input type='hidden' name='$key' value='$content'/>";
}

এটি কাজ করছে, তবে এক্সএসএস আক্রমণগুলির বিরুদ্ধে আপনার ইনপুটগুলি স্যানিটাইজ করতে ভুলবেন না!

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