<ইনপুট টাইপ = "লুকানো"> এর আসল উদ্দেশ্য? [বন্ধ]


101

আমি <input type="hidden">ট্যাগের আসল উদ্দেশ্য সম্পর্কে কৌতূহলী ।

আজকাল এটি প্রায়শই জাভাস্ক্রিপ্টের সাথে একত্রে এর ভেরিয়েবলগুলি সংরক্ষণ করার জন্য ব্যবহৃত হয় যা সার্ভারে প্রেরণ করা হয় এবং এর মতো জিনিস।

সুতরাং, জাভাস্ক্রিপ্টের আগে<input type="hidden"> বিদ্যমান ছিল , তাই এর মূল উদ্দেশ্যটি কী ছিল? আমি কেবল সার্ভার থেকে ক্লায়েন্টের কাছে কোনও মান প্রেরণের কল্পনা করতে পারি যা এক ধরণের স্থিতি বজায় রাখতে ফেরত পাঠানো (অপরিবর্তিত)। বা আমি এর ইতিহাসে কিছু ভুল পেয়েছি এবং সবসময় জাভাস্ক্রিপ্টের সাথে একসাথে ব্যবহার করার কথা ছিল?<input type="hidden">

যদি সম্ভব হয় তবে আপনার উত্তরগুলিতেও রেফারেন্স দিন।


3
রাষ্ট্র বজায় রাখা যদিও আমার পক্ষে শীর্ষস্থানীয় বিষয়ও আমার বাছাই হবে
ফিল

সম্মত হয়েছে, প্রাক-জনবহুল রাষ্ট্রের ট্র্যাকিংয়ের অনুমতি দেওয়ার জন্য (উদাহরণস্বরূপ একটি সম্পাদনার সময় কোনও সারোগেট পিকে) যা স্বয়ংক্রিয়ভাবে জমা দেওয়া পোস্টে পোস্ট / জিইটি
তে

1
জাভাস্ক্রিপ্ট তাদের আরও বেশি থাকার কারণকে সমর্থন করার আগে উপস্থিত রয়েছে (এটি এই প্রশ্নটি বোঝায় যেহেতু এটি কোনও কারণ থেকে বিরত হয় না) - "ভেরিয়েবলগুলি সংরক্ষণ করার" বা "আড়ালবিহীন" ইনপুটটিতে এজেএক্স বা স্টাব কল করার জন্য কোনও জাভাস্ক্রিপ্ট ছিল না there ফর্ম জমা দেওয়ার আগে ক্ষেত্রগুলি .. অন্যান্য বিকৃত হ্যাকের জন্য কোনও সিএসএস ছিল না যেমন একটি সাধারণ পাঠ্য ইনপুট লুকানো making
ব্যবহারকারী2246674

উত্তর:


108

আমি কেবল সার্ভার থেকে ক্লায়েন্টের কাছে কোনও মান প্রেরণের কল্পনা করতে পারি যা এক ধরণের স্থিতি বজায় রাখতে ফেরত পাঠানো (অপরিবর্তিত)।

অবিকল। প্রকৃতপক্ষে, এটি আজও এই উদ্দেশ্যে ব্যবহার করা হচ্ছে কারণ এইচটিটিপি হিসাবে আমরা জানি এটি এখনও কমপক্ষে মৌলিকভাবে একটি রাষ্ট্রবিহীন প্রোটোকল।

এই ব্যবহারের কেসটি প্রথমে এইচটিএমএল ৩.২-এ বর্ণিত হয়েছিল (আমি আশ্চর্য হয়েছি যে এইচটিএমএল ২.০ এর বিবরণ অন্তর্ভুক্ত নয়):

type=hidden
এই ক্ষেত্রগুলি রেন্ডার করা উচিত নয় এবং কোনও ফর্মের সাথে সার্ভারের জন্য রাষ্ট্রীয় তথ্য সঞ্চয় করার জন্য একটি উপায় সরবরাহ করা উচিত। সংশ্লিষ্ট বৈশিষ্ট্য দ্বারা সংজ্ঞায়িত নাম / মান জুটি ব্যবহার করে ফর্মটি জমা দেওয়ার পরে এটি সার্ভারে ফিরে দেওয়া হবে। এটি HTTP- র রাষ্ট্রহীনতার জন্য কাজ। আর একটি পদ্ধতি হল এইচটিটিপি "কুকিজ" ব্যবহার করা।

<input type=hidden name=customerid value="c2415-345-8563">

যদিও এটি উল্লেখ করার মতো যে এইচটিএমএল 3.2 জাভাস্ক্রিপ্টের প্রাথমিক প্রকাশের পরে কেবল ডাব্লু 3 সি সুপারিশ হয়ে গেছে , এটি ধরে নেওয়া নিরাপদ যে গোপন ক্ষেত্রগুলি প্রায়শই একই উদ্দেশ্যে কাজ করে।


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

3
@ ব্রেট 84c: এজন্য আপনার সর্বদা আপনার ইনপুটটিকে বৈধতা দেওয়া উচিত এবং কখনই ক্লায়েন্টকে বিশ্বাস করা উচিত নয়;)
বোল্টক্লক

সঠিকভাবে, আমি কেবল নতুন বিকাশকারীদের জড়িত সম্ভাব্য বিপদ সম্পর্কে সচেতন হওয়ার জন্য এটি বাইরে ফেলে দিচ্ছিলাম।
ব্রেট 84c

2
এই বিপদগুলি সম্পর্কে কিছুই 'লুকানো' ইনপুটগুলির সাথে সুনির্দিষ্ট নয় - ক্লায়েন্টকে পাঠানো যে কোনও কিছুই ফিরে আসার আগে তা হেরফের করা যায়। কুকিজ বা জেএস-ভিত্তিক বিকল্পগুলি কেবল একই।
এফএলহর্ন

10

আমি এখানে একটি সাধারণ সার্ভার সাইড রিয়েল ওয়ার্ল্ড উদাহরণ সরবরাহ করব, বলুন যদি রেকর্ডগুলি লুপ হয় এবং প্রতিটি রেকর্ডটির একটি মুছুন বোতাম সহ একটি ফর্ম থাকে এবং আপনাকে একটি নির্দিষ্ট রেকর্ড মুছতে হবে, সুতরাং এখানে hiddenক্ষেত্রটি কার্যকর হয়, অন্যথায় আপনি জিতেছেন ' এই ক্ষেত্রে মুছে ফেলার রেকর্ডটির রেফারেন্স পান না, এটি হবেid

উদাহরণ স্বরূপ

<?php
    if(isset($_POST['delete_action'])) {
        mysqli_query($connection, "DELETE FROM table_name 
                                   WHERE record_id = ".$_POST['row_to_be_deleted']);
                                   //Here is where hidden field value is used
    }

    while(condition) {
?>
    <span><?php echo 'Looped Record Name'; ?>
    <form method="post">
        <input type="hidden" name="row_to_be_deleted" value="<?php echo $record_id; ?>" />
        <input type="submit" name="delete_action" />
    </form>
<?php
    }
?>

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

8

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

এইচটিএমএল 22 সেপ্টেম্বর, 1995 থেকে নির্দিষ্টকরণ

`TYPE = HIDDEN 'সহ একটি ইনপুট উপাদান একটি গোপন ক্ষেত্রকে উপস্থাপন করে user ব্যবহারকারী এই ক্ষেত্রের সাথে ইন্টারঅ্যাক্ট করেন না; পরিবর্তে, VALUE বৈশিষ্ট্যটি ক্ষেত্রের মান নির্দিষ্ট করে। NAME এবং VALUE বৈশিষ্ট্যগুলি প্রয়োজনীয়।


1
আপনি কি দয়া করে সেই উত্তরটি বিস্তারিতভাবে বর্ণনা করতে পারেন এবং / অথবা কোনও ফর্ম জমা দেওয়ার পরে লুকানো ক্ষেত্রগুলি জমা দেওয়ার এই আচরণের জন্য কিছু রেফারেন্স দিতে পারেন?
গীতারল্যাব

@ গীতারল্যাব, আমি একটি উদাহরণ দিয়েছি (ব্যবহারকারীর আইডি) যাইহোক, ওয়েবে অনেকগুলি উদাহরণ রয়েছে। উদাহরণস্বরূপ ইকোচো.ওএইচটিএমএলফর্ম 077 htm
চক নরিস

1
আমি দুঃখিত, আমার কাছে লাইনটি: original purpose was to make a field which will be submitted *after* form's submitঅস্পষ্ট। এটি ব্যাখ্যা করা যেতে পারে: 'ফর্মটি তার ডেটা পোস্ট করার পরে , তবে লুকানো ক্ষেত্রটি (একটি রহস্যজনক জায়গায়) জমা দেওয়া হবে'। অতএব, উপরে আমার মন্তব্য।
গীতারল্যাব

1
আমি এটি পেয়েছি :) আপনার মন্তব্যের জন্য ধন্যবাদ, আমি আমার উত্তরটি সম্পাদনা করেছি। এটি কেবল ভুল বানান ছিল (ইংরেজীতে এখনও গুরু স্তরে পৌঁছানো হয়নি: ডি)।
চাক নরিস

6

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

এসও আপভোট ক্লিকের জন্য একটি লুকানো ক্ষেত্র ব্যবহার করে।

<input value="16293741" name="postId" type="hidden">

এই মানটি ব্যবহার করে সার্ভার-সাইড স্ক্রিপ্টটি আপভোট সংরক্ষণ করতে পারে।


হাহাহা, ভাল ধরা! এবং যখন আমি মানটির শেষে একটি "এক্স" যুক্ত করি তখন উন্নতি করার সময় একটি ত্রুটি ঘটে: ডি
ইউওও

@ ইউও এবং আপনি এটি লুকিয়ে রাখতে পারেন বা সরাসরি মান পরিবর্তন করতে পারেন। আপনি মানটি একটি অন্য উত্তরে পরিবর্তন করতে পারেন। তারপরে আপনি upvote বোতামে ক্লিক করতে পারেন এবং এটি একটি ভিন্ন উত্তরের জন্য একটি upvote হিসাবে লগ ইন করা হয়। ;)
জেফ্রি হেল

5

মূলত লুকানো ক্ষেত্রগুলি মাল্টি স্টেপ ফর্মের সাথে ব্যবহার করার জন্য আরও দরকারী এবং সুবিধাজনক হবে। আমরা লুকানো ক্ষেত্রগুলি ব্যবহার করে পরবর্তী পদক্ষেপে লুকানো ব্যবহার করে এক ধাপের তথ্য পাস করতে পারি এবং শেষ ধাপ পর্যন্ত এটি এগিয়ে রাখতে পারি।

  1. সিএসআরএফ টোকেন।

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

  1. একাধিক পৃষ্ঠার ফর্মগুলিতে রাষ্ট্র সংরক্ষণ করুন।

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

সাধারণ নিয়ম: ব্যবহারকারীর দেখার প্রয়োজন নেই এমন কোনও কিছু সঞ্চয় করতে ক্ষেত্রটি ব্যবহার করুন তবে আপনি ফর্ম জমা দেওয়ার ক্ষেত্রে সার্ভারে প্রেরণ করতে চান।

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