পিএইচপি-র জন্য নেটবিয়ান 7.4 এ "সুপারগ্লোবাল $ _POST অ্যারে সরাসরি অ্যাক্সেস করবেন না" সতর্কতা


118

আমি message _POST , Net _GET , _S _SERVER , .... ব্যবহার করার সময় পিএইচপি-র জন্য নেটবিন্স 7.4 এ এই বার্তাটি পেয়েছি I've

সরাসরি সুপারগ্লোবাল $ _POST অ্যারে অ্যাক্সেস করবেন না

এর মানে কী? এই সতর্কতাটি সংশোধন করতে আমি কী করতে পারি?

সম্পাদনা করুন: ইভেন্টের নমুনা কোডটি এখনও এই সতর্কতাটি দেখায়।


1
নেটবিনে এই বার্তাটি নিশ্চিত করে এমন কোডটি কী?
টিএমইএসপিপ্লায়ার

2
এটি কেবল একটি প্রস্তাবনা, আপনি বিকল্পগুলিতে এটি বন্ধ করতে পারেন ... এবং আমি বলব এটি কোনও প্রোগ্রামিংয়ের প্রশ্ন নয়!
মাত্তেও তাসিনারি

1
এই সতর্কতাটি আমার কী পরিবর্তন করতে চায় তা আমি কেবল জানতে চাই! কারণ পুরনো নেটবীনের সংস্করণটি প্রদর্শিত হচ্ছে না। Para পরামিতিগুলি পাওয়ার অন্য কোনও উপায় আছে কি? (যার অর্থ $ _POST)
কান্নিকা

@ মাট্টিও তাসিনারি আমি জানি এটি কেবলমাত্র প্রস্তাবনা এবং আমি জানি এটি কোথায় অক্ষম করতে হবে, তবে আমি কোনও সতর্কতা না দিয়ে কী করতে পারি? আমি মনে করি আমার জ্ঞানের সতর্কতা পাওয়ার সীমা রয়েছে তবে আমি আমার কোডটি নতুন জিনিস দিয়ে আপ টু ডেট করার জন্য এটি ঠিক করতে চাই কারণ আমি জানি know _POST এই পোস্টিং ফর্ম জমা দেবে। যাইহোক, আপনার মন্তব্যের জন্য ধন্যবাদ: ডি
কান্নিকা

উত্তর:


92

filter_input(INPUT_POST, 'var_name')পরিবর্তে $_POST['var_name']
filter_input_array(INPUT_POST)পরিবর্তে$_POST


6
আপনি "সতর্কতার অর্থ কী" বা "এটি কীভাবে অপসারণ করবেন" প্রশ্নে উত্তর দিচ্ছেন? কারণ আমি আপনার সাথে একমত, সতর্কতার অর্থ এটাই, তবে সতর্কতা ফাংশনটি ব্যবহার করা সেখানেই থাকে। আমার এখনই এটি আছে $name = filter_input(INPUT_POST, $_POST["name"]);
স্টেঞ্চি

6
@ স্টেনসি আপনি আবার $ _POST ব্যবহার করছেন যখন আপনার this নাম = ফিল্টার_ইনপুট (INPUT_POST, "নাম") এর মতো কিছু করা উচিত;
ওয়াজেসিচ সোবসিজেক

16
ঠিক আছে, সতর্কতাটি অদৃশ্য হয়ে যেতে পারে, তবে আপনি যদি কোনও ফিল্টার নির্দিষ্ট করে না থাকেন তবে নেটবিনগুলি নির্দেশ করছে এমন সুরক্ষা সমস্যাটি আপনি সত্যিই ঠিক করতে পারবেন না। উদাহরণস্বরূপ, আপনি যদি কোন filter_input(INPUT_POST, 'var_name', FILTER_SANITIZE_NUMBER_INT)
পূর্ববর্তী

44
-1: এই উত্তরটি একেবারে তুচ্ছ মনে হয়। কোনও ব্যাখ্যা নেই, ফিল্টার_ইনপুট কী করে, এমনকি পিএইচপিএন / ফিল্টার_পিন্ডের লিঙ্কও নয় । এটি আমাকে ভয় দেখায় যে লোকেরা কেবল এটি দেখতে পাবে, এটি ব্যবহার করবে, ভাবেন যে তারা আরও ভাল কোড লিখছেন তবে এখনও কোনও জিনিস বুঝতে পারে না।
IARI

5
ও, ফিল্টার যুক্তি ছাড়াই ফিল্টার ফাংশন ব্যবহারের পরামর্শ দিলে FILTER_UNSAFE_RAW বাড়ে, যা TRUST_ALL_BAD_INPUT
Kzqai

88

যদিও কিছুটা দেরি হয়ে গেছে, একই সমস্যার সমাধান খুঁজতে গিয়ে আমি এই প্রশ্নটি নিয়ে এসেছি, সুতরাং আমি আশা করি এটি কোনও উপকারে আসতে পারে ...

নিজেকে তোমার চেয়ে একই অন্ধকারে পেয়েছি। সবে এই নিবন্ধটি পাওয়া গেছে, যা নেটবিনস 7.4 এ প্রবর্তিত কিছু নতুন ইঙ্গিতগুলির ব্যাখ্যা করে:

https://blogs.oracle.com/netbeansphp/entry/improve_your_code_with_new

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

উদাহরণস্বরূপ, আমার যেখানে ছিল:

$_SERVER['SERVER_NAME']

আমি পরিবর্তে রেখেছি:

filter_input(INPUT_SERVER, 'SERVER_NAME', FILTER_SANITIZE_STRING)

আপনার এখানে ফিল্টার_ইনপুট এবং ফিল্টার ডক রয়েছে:

http://www.php.net/manual/en/function.filter-input.php

http://www.php.net/manual/en/filter.filters.php


আপনি যা বলছেন ঠিক তা যদি করেন তবে নেটবিনগুলি এখনও "$ _POST" বা "$ _GET" অংশগুলিকে আন্ডারলাইন করবে এবং বিজ্ঞপ্তিটি এমনভাবে প্রদর্শিত হবে যেন এটি ফিল্টার হচ্ছে না। এই সমস্যাটি কেবল নেটবিন বাগ (অন্তত 8.1 সংস্করণে) হতে পারে।
ব্যবহারকারী 3640967 10

6

আমি অন্যান্য উত্তরদাতাদের সাথে একমত যে বেশিরভাগ ক্ষেত্রে (প্রায় সর্বদা) আপনার ইনপুটটি স্যানিটাইজ করা প্রয়োজন।

তবে এই জাতীয় কোডটি বিবেচনা করুন (এটি একটি রেস্ট কন্ট্রোলারের জন্য):

$method = $_SERVER['REQUEST_METHOD'];

switch ($method) {
            case 'GET':
                return $this->doGet($request, $object);
            case 'POST':
                return $this->doPost($request, $object);
            case 'PUT':
                return $this->doPut($request, $object);
            case 'DELETE':
                return $this->doDelete($request, $object);
            default:
                return $this->onBadRequest();
}

এখানে স্যানিটাইজিং প্রয়োগ করা খুব কার্যকর হবে না (যদিও এটি কোনও কিছুতেই ভাঙবে না)।

সুতরাং, প্রস্তাবগুলি অনুসরণ করুন, তবে অন্ধভাবে নয় - বরং কেন সেগুলি রয়েছে তা বুঝতে পারেন :)


1

শুধু ব্যবহার

IN _INPUT_METHOD_NAME এর পরিবর্তে $ _INPUT_METHOD_NAME ['var_name'] ফিল্টার_ইনপুট_আরে (INPUT_METHOD_NAME) এর পরিবর্তে ফিল্টার_ইনপুট (INPUT_METHOD_NAME, 'var_name')

যেমন

    $host= filter_input(INPUT_SERVER, 'HTTP_HOST');
    echo $host;

পরিবর্তে

    $host= $_SERVER['HTTP_HOST'];
    echo $host;

আর ব্যবহার করুন

    var_dump(filter_input_array(INPUT_SERVER));

পরিবর্তে

    var_dump($_SERVER);

এনবি: অন্যান্য সমস্ত সুপার গ্লোবাল ভেরিয়েবলের জন্য প্রয়োগ করুন


0

এখানে আমার কোডের একটি লাইনের অংশ যা নেটবিনে সতর্কতা এনেছে:

$page = (!empty($_GET['p'])) 

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

$p = filter_input(INPUT_GET, 'p');
$page = (!empty($p))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.