ডেটা ইনপুট বৈধতা - কোথায়? কত? [বন্ধ]


28

ডেটা ইনপুট বৈধতা সবসময় আমার কাছে বেশ অভ্যন্তরীণ লড়াই ছিল।

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

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

সংক্ষিপ্ত বিবরণে, এগুলি আমার নির্দেশিকা (তিন স্তরের ওয়েব অ্যাপ্লিকেশন শৈলীতে প্রকাশিত), সংক্ষিপ্ত ব্যাখ্যা সহ:

  • প্রথম স্তরের ক্লায়েন্টের দিক (ব্রাউজার): ন্যূনতম বৈধতা, কেবল অদৃশ্য নিয়ম (বাধ্যতামূলক ইমেল ক্ষেত্র, অবশ্যই একটি আইটেম নির্বাচন করতে হবে এবং এর মতো); "ation থেকে ২০ টি অক্ষরের মধ্যে" যেমন অতিরিক্ত বৈধতার ব্যবহার কম ঘন ঘন ঘটে থাকে, কারণ এটি পরিবর্তনের উপর রক্ষণাবেক্ষণের কাজ বাড়ায় (ব্যবসায়ের কোডটি স্থিতিশীল হওয়ার পরে যুক্ত হতে পারে);

  • প্রথম স্তরের সার্ভার সাইড (ওয়েব যোগাযোগের হ্যান্ডলিং, "কন্ট্রোলারস"): আমার এটির কোনও নিয়ম নেই, তবে আমি বিশ্বাস করি যে এখানে কেবল ডেটা ম্যানিপুলেশন এবং সমাবেশ / পার্সিং ত্রুটিগুলি পরিচালনা করা উচিত (জন্মদিনের ক্ষেত্রটি বৈধ তারিখ নয়); এখানে আরও বৈধতা যুক্ত করা সহজেই এটি সত্যিই বিরক্তিকর প্রক্রিয়া করে তোলে;

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

  • তৃতীয় স্তরের (ডেটা স্তর / ডএএল / ডিএও): কখনও বিশ্বাস করেনি যে এখানে খুব বেশি বৈধতা পাওয়া দরকার, কারণ কেবলমাত্র ব্যবসায় স্তরটি ডেটা অ্যাক্সেস করার কথা বলেছে ("প্যারাম 1 সত্য হলে" প্যারাম 2 অবশ্যই নਾਲ হওয়া উচিত নয় "এর মতো কোনও ক্ষেত্রে বৈধতা প্রমাণ করতে পারে); তবে খেয়াল করুন, যখন আমি "এখানে" আমি "কোড" ডাটাবেস অ্যাক্সেস করি "বা" এসকিউএল-এক্সিকিউটিভ পদ্ধতি "ব্যবহার করি তখন ডাটাবেস নিজেই সম্পূর্ণ বিপরীত হয়;

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

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

তো, এই ব্যাপারে তোমার মতামত কী? বিপরীত মতামত? আপনার কি অন্যান্য পদ্ধতি আছে? এই জাতীয় বিষয়ের একটি রেফারেন্স? যে কোনও অবদান বৈধ।

দ্রষ্টব্য: আপনি যদি জাভা পদ্ধতিতে কাজ করার চিন্তাভাবনা করে থাকেন তবে আমাদের অ্যাপ্লিকেশনটি স্প্রিং এমভিসি এবং মাইবাটিস (পারফরম্যান্স এবং খারাপ ডেটাবেস মডেলকে ORM সমাধানগুলি বাতিল করে দেয়) এর ভিত্তিতে স্প্রিং ভিত্তিক; আমি আমাদের সুরক্ষা সরবরাহকারী প্লাস জেএসআর 303 (হাইবারনেট ভ্যালিডেটর?) হিসাবে স্প্রিং সিকিউরিটি যুক্ত করার পরিকল্পনা করছি

ধন্যবাদ!


সম্পাদনা করুন: তৃতীয় স্তরের কিছু অতিরিক্ত স্পষ্টতা।


হাইবারনেট ভ্যালিডেটর কীভাবে কাজ করে তা অধ্যয়ন করার জন্য আমার পরামর্শ। জেএসআর 303 কার্যকর হিসাবে পাওয়া যায় নি, জেদীকরণের জন্য বৈধতাটির জন্য, যেখানে আমার কিছু বিধি অধ্যবসায়ের আগে অনেকগুলি প্রয়োগ করা হয়েছিল, কারণ আমার ব্যবসায়িক বিধিগুলি ছিল যা মৌলিক বৈধতার উপর নির্ভর করে। আমার মতে, এটি খুব ঘনিষ্ঠ মডেলটির জন্য কাজ করে; হতে পারে আমি এটি ভুলভাবে ব্যবহার করছিলাম, তবে আমার থেকে কোনওরকম অভিজ্ঞতার সাথে আমি কখনও পাইনি।
ভিনিত রেনোল্ডস

@ ভিনিট রেইনল্ডস আমি ইতিমধ্যে এটি স্প্রিং এমভিসির সাথে ফর্ম বৈধতার জন্য ব্যবহার করেছি, এটি সত্যিই দুর্দান্ত সংমিশ্রণ। আমি কোনও প্রচেষ্টা ছাড়াই সামান্য-দানাদার বার্তাগুলি সহ সার্ভার সাইডের বৈধতা পেয়েছি, ব্যবহারকারীর কাছে যথাযথ ত্রুটি প্রদর্শিত হয়েছে। আমি এখনও এটির পুরোপুরি সার্ভার সাইড অবজেক্টগুলিতে পরীক্ষা করব, সুবিধার বিষয়ে নিশ্চিত নই। এই নমুনা পোস্টটি একবার দেখুন, আমি এটি কীভাবে ব্যবহার করেছি: কোডমুনচিজ.com
2010

2
করা খুব বেশী বৈধতা। এই ব্যবহারকারীর ইনপুটগুলিকে যেখানেই অভিহিত করা হয় # #! ! @@!
চানি

উত্তর:


17

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

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

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


2
+1 একেবারে। আমি এএসপি.নেট এমভিসি সম্পর্কে একই কথা বলতে যাচ্ছিলাম, তবে আপনি আমাকে এতে মারধর করেছেন। :) সত্যই, কোনও সিস্টেম বৈধ অবস্থায় রয়েছে তা নিশ্চিত করার জন্য আমরা কেবলমাত্র বৈধতার প্রয়োজন place ক্লায়েন্ট সাইডের মতো বাকি বৈধতাটি ব্যবহারকারীর জন্য ব্যবহারযোগ্যতা এবং সময় নষ্ট করা বাড়াতে হয়, যাতে এটি প্রধান ফোকাস হওয়া উচিত। ধারাবাহিকতা কী।
রায়ান হেইস

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

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

10

একটি রিলেশনাল সিস্টেমে, আমি এটি একটি তিন স্তরযুক্ত পদ্ধতির হিসাবে দেখছি। প্রতিটি স্তর নীচের অংশে সীমাবদ্ধ:

  • উপস্থাপনা / ইউআই
    • সাধারণ ইনপুট বৈধতা
    • ইনপুটটি ভুল ফর্ম্যাটে থাকলে এগিয়ে যান না do
    • "গেট" ক্লায়েন্ট আরও ভাল ব্যবহারযোগ্যতা এবং ব্যান্ডউইথ / সময় হ্রাস করার জন্য সার্ভারকে রাউন্ড-ট্রিপগুলি হ্রাস করার অনুরোধ করে
  • যুক্তিবিদ্যা
    • ব্যবসায়িক যুক্তি এবং অনুমোদন
    • ব্যবহারকারীদের এমন কাজ করতে দেবেন না যা তাদের করার অনুমতি নেই
    • এখানে "উত্পন্ন" বৈশিষ্ট্য এবং স্থিতি পরিচালনা করুন (ডাটাবেসে যে জিনিসগুলি সংজ্ঞায়িত করা হবে)
  • উপাত্ত
    • প্রয়োজনীয় তথ্য অখণ্ডতা স্তর
    • একেবারে কোনও জাঙ্ক সংরক্ষণ করতে অস্বীকার করুন
    • ডিবি নিজেই ডেটা ফর্ম্যাটগুলি প্রয়োগ করে (int, তারিখ, ইত্যাদি)
    • সঠিক সম্পর্ক নিশ্চিত করতে ডাটাবেস সীমাবদ্ধতা ব্যবহার করুন

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

আমি জানি না এখানে কোন রূপালী বুলেট আছে কিনা ... তবে আপনি যেভিভিতে রয়েছেন তাই আমি ক্লায়েন্ট এবং সার্ভারের মধ্যে জাভাস্ক্রিপ্টের বৈধতা কোডটি অন্তত ভাগ করার জন্য রিনোর দিকে তাকানোর পরামর্শ দেব। আপনার ইনপুট বৈধতা দুটি লিখবেন না।


আমি রাইনো একবার দেখে নেব। যদি এটি কোনওভাবে বসন্তের এমভিসি ফর্ম বৈধতার সাথে সংহত করতে পারে তবে আরও ভাল।
এমডিআরজি

8

• তৃতীয় স্তর (ডেটা স্তর / ডএএল / ডিএও): কখনও বিশ্বাস করেনি যে এখানে খুব বেশি বৈধতা পাওয়া দরকার, কারণ কেবলমাত্র ব্যবসায় স্তরটি ডেটা অ্যাক্সেস করার কথা বলেছে ("প্যারাম 1 সত্য হলে" প্যারাম 2 অবশ্যই নਾਲ হওয়া উচিত নয় "এর মতো কোনও ক্ষেত্রে বৈধতা প্রমাণ করতে হবে) ।

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

তিনি আমার চেয়ে এটি আরও ভাল বলেছেন: http://softarch.97things.oreilly.com/wiki/index.php/ ডেটাবেস_এ_এ_ফোর্ট্রেস


আমি এই নিবন্ধটির সাথে খুব শেষের সাথে একমত, আমার ধারণা আমি এই অংশে নিজেকে পরিষ্কার করে দেখিনি। আমি আরও বিশদ সহ প্রশ্নটি আপডেট করেছি। ধন্যবাদ!
এমডিআরজি

2

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

অবশ্যই, খুব বেশি বৈধতা যাচাই করা খারাপ জিনিস, তবে ধরে নেওয়া প্রোগ্রাম, নেটওয়ার্ক এবং ওএস এর নিখুঁত, হ্যাকাররা আপনার ফায়ারওয়ালের মাধ্যমে পাবে না, কোনও ডিবিএ হ'ল ম্যানুয়ালি "টুইঙ্ক" করবে না ডাটাবেস সম্ভবত আরও খারাপ।

জিনিসগুলির চারদিকে সীমানা বৃত্ত আঁকুন, ব্যর্থতার মোডগুলি এটির বিরুদ্ধে সুরক্ষিত করুন এবং সেই সীমানার জন্য উপযুক্ত স্তরের পরীক্ষার কার্যকর করুন identify উদাহরণস্বরূপ, আপনার ডাটাবেসটি কখনই অবৈধ ডেটা দেখতে পাবে না, তবে কীভাবে এটি ঘটতে পারে এবং যদি তা হয় তবে কী হবে? আপনার ব্যবহারকারী কে, ব্যর্থতার মূল্য কী?

শারীরিক বিশ্ব সুরক্ষা মডেলগুলি অধ্যয়ন করুন, সুরক্ষা স্তরগুলিতে হওয়া উচিত, একটি পেঁয়াজের মতো। একটি ঘন প্রাচীর খারাপ নিরাপত্তা হিসাবে বিবেচিত হয়। ডেটা বৈধতা একইভাবে বিবেচনা করা উচিত।


1

বৈধতার জন্য দুটি সংক্ষিপ্ত, সাধারণ নিয়ম:

আপনি যদি এমন কোনও কল করতে যাচ্ছেন যা গ্যারান্টি দেয় না তবে এটি আপনাকে কোনও কলকারীর কাছে ফিরে যেতে পারে এমনভাবে অবৈধ ইনপুট সম্পর্কে আপনাকে কিছু বলার (ত্রুটি, ব্যতিক্রম) ফিরিয়ে দেবে, যাচাই করে নিন।

আপনি যদি ডেটা দিয়ে অন্য কিছু করতে যাচ্ছেন (সিদ্ধান্ত নেবেন, গণিত করুন, এটি সঞ্চয় করুন ইত্যাদি), এটিকে বৈধতা দিন।

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