অন্যান্য সম্ভাব্য ক্ষতিকারক বৈশিষ্ট্যের বিপরীতে ইওল জাতীয় বৈশিষ্ট্যগুলিকে কেন মন্দ হিসাবে বিবেচনা করা হয়?


51

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

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

  • সফ্টওয়্যার উপাদানগুলিতে কাস্টম অ্যাক্সেসের নিয়মগুলি (আইআইআরসি ওপেনআরপি-তে একটি বস্তু রয়েছে ir.ruleযা ডায়নামিক পাইথন কোড ব্যবহার করতে পারে)।
  • কাস্টম গণনা এবং / অথবা মানদণ্ড (কাস্টম কোড গণনার অনুমতি দেওয়ার জন্য ওপেনআরপি-র মতো ক্ষেত্র রয়েছে)।
  • ওপেনআরপি রিপোর্ট পার্সার্স (হ্যাঁ আমি জানি আমি আপনাকে ওপেনআরপি স্টাফ দিয়ে প্রকাশ করছি ... তবে এটি আমার কাছে প্রধান উদাহরণ)।
  • কিছু আরপিজি গেমগুলিতে কোডিং স্পেল এর প্রভাবগুলি।

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

তবে, জনপ্রিয় সংস্কৃতিতে ইভাল মন্দ evil আপনার সিস্টেমে ভাঙার মতো জিনিসগুলি মনে আসে।

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

সুতরাং, মূলত, যখন বেশিরভাগ সময় কোনও কোড সঠিকভাবে লেখা হয় না বা সঠিকভাবে দেখা হয় না (সংস্থানসমূহ, ব্যবহারকারী, পরিবেশ, ...), কোডটি খারাপ এবং এমনকি অর্থনৈতিক প্রভাব পর্যন্ত নিয়ে যেতে পারে।

তবে evalফাংশনগুলির সাথে বিশেষ কিছু আছে (ভাষা নির্বিশেষে)।

প্রশ্ন : অন্যান্য ভয়ঙ্কর বৈশিষ্ট্যগুলিতে একই মনোযোগ দেওয়ার পরিবর্তে এই ভয়টি জনপ্রিয় সংস্কৃতির অংশ হওয়ার কোনও historicalতিহাসিক সত্য আছে কি?


11
আমি একমত নই যে এটি খুব বিস্তৃত এবং প্রমাণ হিসাবে আমি যুক্তিযুক্ত দৈর্ঘ্যের চারটি উত্তর উপস্থাপন করি।

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

13
অন্যান্য বিপজ্জনক বৈশিষ্ট্যগুলির চেয়ে বেশি মনোযোগ সহকারে কেন এটি জনপ্রিয় সংস্কৃতির অংশ হয়ে উঠেছে? কারণ অনুপ্রাস Eval - মন্দ মনে রাখা সহজ হয়
Bergi

5
স্মৃতি বরাদ্দ এবং পয়েন্টার এরিথমেটিক হয় , মন্দ হিসেবে দেখা অনেক দ্বারা।
ব্যবহারকারী 253751

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

উত্তর:


76

evalনিজেই একটি ক্রিয়াকলাপ মন্দ নয়, এবং একটি সূক্ষ্ম বক্তব্য রয়েছে যা আমি বিশ্বাস করি না যে আপনি তৈরি করছেন:

কোনও প্রোগ্রামকে স্বেচ্ছাচারী ব্যবহারকারী ইনপুট কার্যকর করতে মঞ্জুরি দেওয়া খারাপ

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

একবার আপনি ব্যবহারকারীদের যে কোনও কিছু কার্যকর করতে অনুমতি দিন, এমনকি ব্যবহারকারী অধিকার দ্বারা বা "সুরক্ষিত" স্ক্রিনের পিছনে লক হয়ে গেলেও আপনি আক্রমণকারী ভেক্টর তৈরি করেন। প্রতি সপ্তাহে, কিছু এলোমেলো সিএমএস, ব্লগিং সফ্টওয়্যার ইত্যাদির একটি সুরক্ষা ছিদ্র থাকে যা আক্রমণকারী এইভাবে একটি গর্ত শোষণ করতে পারে। আপনি এমন কোনও ক্রিয়াকলাপের অ্যাক্সেস rm -rf /বা অন্য কোনও বিপর্যয়কর ব্যবহারের অ্যাক্সেস রক্ষা করতে পুরো সফটওয়্যার স্ট্যাকের উপর নির্ভর করছেন (দ্রষ্টব্য: এই আদেশটি সফল হওয়ার সম্ভাবনা কম তবে কিছুটা ক্ষতি করার পরে ব্যর্থ হবে )।

অন্যান্য ভয়ঙ্কর বৈশিষ্ট্যগুলির প্রতি একই মনোযোগ দেওয়ার পরিবর্তে এই ভয়টি জনপ্রিয় সংস্কৃতির অংশ হওয়ার কোনও historicalতিহাসিক সত্য আছে কি?

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

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

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


2
তুমি সেই একজন :). যদিও এই সংস্কৃতিতে অবদান রাখার জন্য যদি কোনও সুপরিচিত উদাহরণ থাকে তবে আমি উত্তরটিতে এটি দেখতে চাই।
লুইস মাসুয়েলি

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

1
আমার আইডিই হ'ল এমন একটি প্রোগ্রাম যা আমাকে - এটির ব্যবহারকারী - স্বেচ্ছাসেবীর ইনপুট কার্যকর করতে সহায়তা করে। আমি এটি খারাপের চেয়ে দরকারী বলে মনে করি।
ডেন

3
@ দিন এটি ব্যতিক্রম হবে। আইডিই হওয়ার কারণে, আমি নিশ্চিত যে আপনি সেই ক্ষমতা ছাড়াই মায়ামের কারণ হতে পারেন। এটি আপনার উত্স কোডটিতে লিখুন। এছাড়াও, আপনার যে কম্পিউটারে এটি চালিত হবে তার সম্পূর্ণ অ্যাক্সেস আপনার কাছে রয়েছে। এখানে বোঝা যাচ্ছে যে একটি সুবিধাগুলি উন্নতeval করতে পারে । যদি তারা ইতিমধ্যে উন্নত হয় তবে এটি কোনও সমস্যা নয়।

3
@ ডেন: রাইমন্ড চেনকে "বিমানের অন্য দিক" হিসাবে সংক্ষিপ্তসার দেওয়া হয়েছিল। আপনি ইতিমধ্যে চালাতে পারেন rm -rf /, কোনও আইডিইর মাধ্যমে জটিল উপায়ে এটি করার দরকার নেই। সমস্যাটি evalহ'ল এটি সেই দক্ষতাটি অনেক অভিনেতাদের কাছে উন্মুক্ত করে, যার সেই ক্ষমতাটি থাকা উচিত নয়।
এমসাল্টার্স

38

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

এভ্যাল ভারী নিরুৎসাহিত হয় কারণ এটি বেশ কয়েকটি সাধারণ সমস্যা একত্রিত করে।

প্রথমত, এটি ইনজেকশন আক্রমণে সংবেদনশীল। এখানে এটি এসকিউএল ইনজেকশনের মতোই যখন ব্যবহারকারীর দ্বারা নিয়ন্ত্রিত ডেটা কোডের মধ্যে প্রবেশ করানো হয়, এটি সহজেই ঘটনাক্রমে স্বেচ্ছাসেবক কোড beোকাতে দেয়।

দ্বিতীয়ত, নবীনদের খারাপভাবে কাঠামোগত কোডটি পেতে ইওল ব্যবহার করার ঝোঁক থাকে। একটি শিক্ষানবিশ কোডার এমন কোড লিখতে পারে যা দেখে মনে হয়:

x0 = "hello"
x1 = "world"
x2 = "how"
x3 = "are"
x4 = "you?"
for index in range(5):
   print eval("x" + index)

এটি কাজ করে তবে সত্যই এই সমস্যাটি সমাধানের ভুল উপায়। স্পষ্টতই, একটি তালিকা ব্যবহার করা আরও ভাল হবে।

তৃতীয়ত, ইভাল সাধারণত অদক্ষ হয়। আমাদের প্রোগ্রামিং ভাষার প্রয়োগগুলি দ্রুততর করতে প্রচুর প্রচেষ্টা ব্যয় করা হয়। তবে eval দ্রুত করা কঠিন এবং এটি ব্যবহার করা সাধারণত আপনার পারফরম্যান্সে ক্ষতিকারক প্রভাব ফেলবে।

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


13
আপনার দ্বিতীয় কেসটি খুব গুরুত্বপূর্ণ। যে ভাষাগুলিতে স্পষ্ট থাকে তবে সংকলিত হয় সেগুলিতে একটি পরিবর্তনশীল রেফারেন্স তৈরি করার জন্য একটি স্ট্রিংকে মূল্যায়ন করা তুচ্ছ নয়। যেমন, যদি var x = 3; print(x)হয় কম্পাইল তারপর কোনো রান-টাইম যে জ্ঞান থাকা প্রয়োজন নেই উৎস নাম "X" ব্যবহার করা হয়েছে। var x = 3; print(eval("x"))কাজ করার জন্য , সেই ম্যাপিংটি রেকর্ড করা দরকার। এটি একটি আসল সমস্যা: কমন লিস্পে (let ((x 3)) (print (eval 'x)))একটি আনবাউন্ড ভেরিয়েবল ব্যতিক্রম ছুঁড়ে ফেলা হবে কারণ কোড সংকলনের পরে লেক্সিকাল ভেরিয়েবল এক্স নামের সাথে কোনও সংযোগ নেই ।
জোশুয়া টেলর

@ জোহানুয়া টেইলর আপনি কি দ্বিতীয় তৃতীয় কারণের অর্থ ?
ব্যবহারকারী 253751

1
@ মিম্বিস, আমি মনে করি তিনি দ্বিতীয় কারণে কোডটি উল্লেখ করছেন। তবে আপনি সঠিক, এটি তৃতীয় কারণের সাথে সত্যই সম্পর্কিত performance
উইনস্টন ইওয়ার্ট

এই প্রশ্ন দেখেছি , তাই না? ;)
jpmc26

@ jpmc26, না। তবে আমি এর মতো প্রচুর দেখেছি।
উইনস্টন ইওয়ার্ট

20

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

"অন্যান্য সম্ভাব্য ক্ষতিকারক বাগগুলি" এরও সীমাবদ্ধতা থাকতে পারে যার অর্থ তারা সংজ্ঞা অনুসারে একটি স্বেচ্ছাসেবক কোড কার্যকর করার চেয়ে কম ক্ষতি করতে সক্ষম হয় execution


2
তর্কের খাতিরে, পয়েন্টারগুলির অপব্যবহারও স্বেচ্ছাসেবী কোড কার্যকর করার দিকে পরিচালিত করে , তবুও পয়েন্টারগুলি এর চেয়ে কম কিছুকেই কমিয়ে দেয় eval
দিমিত্রি গ্রিগরিয়েভ

12
পুনঃটুইট করেছেন সি ++ এর বাইরে পয়েন্টারগুলি সাধারণত অত্যন্ত বিপজ্জনক এবং এড়ানো হয়। সি # পয়েন্টারগুলিকে সমর্থন করে, উদাহরণস্বরূপ, তবে আপনি অন্যান্য সমস্ত বিকল্প (সাধারণত, ডেটা ম্যানিপুলেশনের ক্ষেত্রে পারফরম্যান্সের কারণে) নিঃশেষ করার পরে আপনি সর্বশেষ জিনিসটি চেষ্টা করার প্রবণতা দেখান। বেশিরভাগ আধুনিক ভাষার পয়েন্টারগুলির জন্য কোনও সমর্থন নেই। এমনকি সি ++ নিজেই "নিরাপদ" পয়েন্টারগুলির দিকে এগিয়ে চলেছে যেগুলি নির্বিচারে পয়েন্টারগুলির সাহায্যে সমস্যাগুলি দূর করার চেষ্টা করে (যেমন নিরাপদ_পাত্র ব্যবহার করে, কেবল রেফারেন্সের পরিবর্তে সত্যিকারের তালিকা / অ্যারেগুলি ব্যবহার করে, রেফারেন্স পাসিং ...)।
লুয়ান

2
@ দিমিত্রিগ্রিরিভ: আপনি কি কারও জন্য একটি রেফারেন্স দিতে পারেন যে বলছেন যে পয়েন্টারগুলি ইওল এর চেয়ে কম বিপজ্জনক?
জ্যাকবিবি


1
@ জ্যাক্কসবি, হ্যাঁ; এটি একটি রসিকতা হিসাবে লক্ষ্য করা হয়েছিল (আমি আশা করি হাসি এটি যথেষ্ট পরিষ্কার করে দেবে)। ওপি আমার পক্ষে নয়, উক্ত বিবৃতি দিয়েছে, সুতরাং আপনার উচিত তার কাছে প্রমাণের জন্য জিজ্ঞাসা করা।
দিমিত্রি গ্রিগরিয়েভ

15

এর একটি ব্যবহারিক এবং তাত্ত্বিক কারণ রয়েছে।

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

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

আপনার বানান প্রভাবের উদাহরণটি গ্রহণ করুন: গেম ডিজাইনারদের সি ++ (বা যাই হোক না কেন) এর চেয়ে সহজ ভাষাটি বানানের প্রভাবগুলি বর্ণনা করার জন্য আপনার গেমটিতে লুয়া (বা যাই হোক না কেন) সংকলক বা দোভাষী তৈরি করা এক জিনিস। আপনি যা করছেন তার সবকটি কোডের মূল্যায়ন যা গেমটিতে বা ডিএলসিতে বা কী-কী রয়েছে তা অন্তর্ভুক্ত করে যদি বেশিরভাগ "ইল এর সমস্যাগুলি" প্রয়োগ হয় না। এটি কেবল ভাষার মিশ্রণ। আপনি যখন ফ্লাইতে লুয়া (বা সি ++, বা এসকিউএল, বা শেল কমান্ড, বা যা কিছু) জেনারেট করার চেষ্টা করেন এবং এলোমেলো করে ফেলেন তখন বড় সমস্যাগুলি আপনাকে আঘাত করবে hit


1
অবশ্যই, রানটাইম কোড জেনারেশন সঠিকভাবে করা যেতে পারে, এবং ইভাল কার্যকর হতে পারে। উদাহরণস্বরূপ, আমি প্রায়শই রূপক / ম্যাক্রো-জাতীয় স্টাফের জন্য ইয়াল ব্যবহার করি, বিশেষত যখন আমি "ক্লিনার" ওওপি বা কার্যকরী সমাধান সরবরাহ করতে পারি তার চেয়ে বেশি পারফরম্যান্স চাই। ফলাফলযুক্ত কোডটি প্রায়শই ভাল এবং সহজ হয় কারণ কম বয়লারপ্লেট থাকে। তবে স্যান্ডবক্সিং, পলায়ন ব্যবস্থা, কোড ইনজেকশন, স্কোপিংয়ের নিয়ম, ত্রুটি প্রতিবেদনকরণ, অপ্টিমাইজেশন ইত্যাদি সম্পর্কিত বিভিন্ন সমস্যা সম্পর্কে সচেতন হওয়া ভাষায় দক্ষতার একটি অনানুষ্ঠানিক স্তর প্রয়োজন, এবং এওলটি জ্ঞান ছাড়াই ইতিবাচকভাবে বিপজ্জনক।
amon

11

না, কোন সুস্পষ্ট historicalতিহাসিক সত্য নেই।

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

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

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


1
... অথবা কোনও বিশ্বস্ত উত্স, যেমন কোনও গেমের জন্য বানান সংজ্ঞা ফাইল থেকে ইনপুট আসে।
ব্যবহারকারী 253751

3
@ মিমিবিস তবে যদি ইনপুটটি পূর্বনির্ধারিত এবং নিরাপদভাবে পরীক্ষিত হয় তবে কেন সিস্টেমের উত্সে অন্তর্ভুক্ত করা যেতে পারে যখন সেগুলি ব্যবহার করবে?
জুলাই 9

3
@ মিম্বিস - কারণ গেম ফাইলগুলি কেউ কখনও হ্যাক করে না ...
টেলাস্টিন

2
... "টুরিং সম্পূর্ণ" এর অর্থ এটাই নয় (টুরিং সম্পূর্ণতা অপ্রাসঙ্গিক থেকে রিয়েল-ওয়ার্ল্ড কম্পিউটিংয়ের এক ধাপ দূরে)।
লুশেনকো

1
@ টেলাস্টিন: যা একটি জাভাস্ক্রিপ্ট প্রোগ্রাম করতে পারে না। অথবা একটি সি ++ প্রোগ্রামও। জাভাস্ক্রিপ্ট একটি স্যান্ডবক্সের মধ্যে চলে (ব্রাউজার) যা নিজেই অন্য স্যান্ডবক্সে থাকে (x86 স্পিকারে 3 টি রিং)। বিঘ্নিত ভেক্টর ওএস নিয়ন্ত্রণের অধীনে সেই স্যান্ডবক্সের বাইরে is এবং যে বাহ্যিক স্যান্ডবক্স, রিং 3, এটি সিপিইউ দ্বারা প্রয়োগ করা হয়।
এমসাল্টার্স

6

আমি মনে করি এটি নীচের দিকগুলিতে ফুটে উঠেছে:

  • অপরিহার্যতা
  • (রক্ষিত) ব্যবহার
  • প্রবেশ
  • যাচাইযোগ্যতা
  • মাল্টি-স্টেজ আক্রমণ

অপরিহার্যতা

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

(পরে)

এটি কেনার জন্য ধন্যবাদ। যেমনটি আপনি প্রতিশ্রুতি দিয়েছিলেন ঠিক তেমন এটি আপনি দেখতে পাবেন। ওহ, আপনি একটি চিত্র খুলতে চান? না, আপনি পারবেন না। readকিছুটা নিরাপত্তাহীন হওয়ায় আমি পদ্ধতিটি ব্যবহার করব না । সংরক্ষণ করা হচ্ছে? না, আমি ব্যবহার করবে না write

আমি যা বলতে চাইছি তা হল: আপনার প্রায় বেসিক সরঞ্জামগুলির জন্য পড়তে / লিখতে হবে। আপনার ওহ-তাই-দারুণ গেমের উচ্চ স্কোর সঞ্চয় করার জন্য একই।

পড়া / লেখা ছাড়া আপনার চিত্র সম্পাদকটি অকেজো less ছাড়া eval? আমি তার জন্য আপনাকে একটি কাস্টম প্লাগইন লিখব!

(রক্ষিত) ব্যবহার

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

তবে অন্যান্য ক্ষেত্রে, স্ট্রিংটি readপুরোপুরি প্রোগ্রামারদের নিয়ন্ত্রণে থাকে (সম্ভবত হার্ডকোডযুক্ত?)। সেক্ষেত্রে এটি ব্যবহার করা খুব কমই খারাপ read

প্রবেশ

এখন, অন্য একটি সহজ উদাহরণ ব্যবহার করে eval

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

(এটি, যতক্ষণ না আপনি সেই দুর্দান্ত প্রশাসককে বরখাস্ত করেন তবে তার অ্যাক্সেসটি প্রত্যাহার করতে ভুলে যান। এখন আপনার ওয়েব-অ্যাপটি ট্র্যাশ হয়ে গেছে)।

যাচাইযোগ্যতা।

আমি মনে করি, গুরুত্বপূর্ণ অন্য একটি দিকটি ব্যবহারকারীর ইনপুট যাচাই করা কতটা সহজ।

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

লিখিত কলটিতে ব্যবহারকারী ইনপুট? একই!

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

Eval? আপনি কীভাবে evalকলটির জন্য ব্যবহৃত ইনপুট যাচাই করবেন ? আপনি খুব কঠোর পরিশ্রম করতে পারেন তবে এটি নিরাপদে কার্যকরভাবে তৈরি করা সত্যই কঠিন (যদি অসম্ভব না হয়)।

মাল্টি-স্টেজ আক্রমণ

এখন, আপনি যখনই প্রতিটি ব্যবহারকারীর ইনপুট ব্যবহার করবেন তখন আপনাকে এটি ব্যবহারের সুবিধাগুলি, ঝুঁকির বিরুদ্ধে হওয়া উচিত। আপনি যতটা পারেন তার ব্যবহার রক্ষা করুন।

evalঅ্যাডমিন উদাহরণে সক্ষম জিনিস আবার বিবেচনা করুন । আমি আপনাকে বললাম যে সাজান ঠিক ছিল।

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

(এক্সএসএসের পরিবর্তে এসকিউএল ইঞ্জেকশন দিয়ে একই মাল্টি-স্টেজ আক্রমণ করা যেতে পারে, বা কিছু স্বেচ্ছাসেবী ফাইল ব্যবহারের পরিবর্তে এক্সিকিউটেবল কোডের পরিবর্তে লিখতে পারে eval)


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

2
@ জার্গডব্লিউমিত্যাগ: আমাকে ককের লিখিত একটি প্রোগ্রাম দিন এবং আমি এটি প্রমাণ করব।
আন্দ্রে পরামেস

1
@ জার্গডব্লিউমিত্যাগ: সম্মত। ভাষার উপর নির্ভর করে এবং ব্যবহারকারীর ইনপুটটির সুযোগ। এটা পাশাপাশি হতে পারে eval("hard coded string" + user_input_which_should_be_alphanumeric + "remainder")। ইনপুটটি আলফানিউমেরিক কিনা তা যাচাই করা সম্ভব। এছাড়াও, 'এটি কি থেমে যায়' এটি অর্থোগোনাল থেকে 'এটির পরিবর্তিত / অ্যাক্সেসের স্থিতিটি স্পর্শ করা উচিত নয়' এবং 'এটি কল করে না এমন পদ্ধতি ব্যবহার করে'।
সুজার্ড জব পোস্টমাস

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

3

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

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

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

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

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


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

1

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

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


0

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

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


এমনকি এটি জিজ্ঞাসা করা প্রশ্নের সমাধান করার চেষ্টাও করে না, "এই ভয়টি জনপ্রিয় সংস্কৃতির অংশ হয়ে যাওয়ার কোনও historicalতিহাসিক সত্য আছে কি"? দেখুন কিভাবে উত্তর দিতে
মশা

আমার মতামতটি, প্রশ্নটি একটি মিথ্যা ভিত্তির উপর ভিত্তি করে, তাই আমি এর উত্তর দিয়েছি।
ব্যবহারকারী1751825

0

আমি মনে করি আপনি আপনার প্রশ্নের নীচের অংশে এটি বেশ ভালভাবে কভার করেছেন (জোর আমার):

যতক্ষণ না তারা সঠিকভাবে ব্যবহার করা হয় ততক্ষণ তাদের একটি ভাল ব্যবহার রয়েছে

95% কে যারা এটি সঠিকভাবে ব্যবহার করতে পারে এটি সব ভাল এবং ভাল; তবে সবসময় এমন লোক থাকবে যারা এটিকে সঠিকভাবে ব্যবহার করে না। এর মধ্যে কিছু অনভিজ্ঞতা এবং দক্ষতার অভাবে নেমে আসবে, বাকিগুলি দূষিত হবে।

এমন লোকেরা সবসময় থাকবে যারা সীমানা ঠেকাতে এবং সুরক্ষা গর্ত খুঁজতে চায় - কিছু ভালোর জন্য, কেউ খারাপের জন্য for

এটির historicalতিহাসিক সত্যের দিকটি হিসাবে, evalটাইপ ফাংশনগুলি মূলত স্বেচ্ছাচারিত কোড কার্যকর করার অনুমতি দেয় যা পূর্বে জনপ্রিয় ওয়েব সিএমএস, জুমলাতে ব্যবহৃত হয়েছিল! । সঙ্গে জুমলা বিশ্বব্যাপী আড়াই মিলিয়নেরও বেশি সাইটকে শক্তিশালী করা , এটি কেবলমাত্র সেই সাইটগুলির দর্শনার্থীদেরই নয়, সম্ভাব্যভাবে এটি যে আঞ্চলিক অবকাঠামোতে আয়োজিত রয়েছে এবং যে সাইটগুলি / সংস্থাগুলি শোষণ করা হয়েছে তারও সম্ভাব্য ক্ষতি করে।

জুমলা! উদাহরণ একটি সাধারণ হতে পারে, তবে এটি রেকর্ড করা হয়েছে one


0

ব্যবহারকে নিরুৎসাহিত করার কয়েকটি ভাল কারণ রয়েছে eval(যদিও কিছু নির্দিষ্ট ভাষার সাথে সুনির্দিষ্ট)।

  • পরিবেশ (লেক্সিক্যালি এবং ডায়নামিকালি) ব্যবহৃত evalপ্রায়শই অবাক করে তোলে (যা আপনার মনে হয় eval(something here)একটি কাজ করা উচিত, তবে এটি অন্যটি করে, সম্ভবত ব্যতিক্রমগুলি ট্রিগার করে)
  • একই জিনিসটি প্রায়শই সম্পাদন করার জন্য আরও ভাল উপায় রয়েছে (নির্মিত লেকসিকাল ক্লোজারগুলির সংক্ষিপ্ত বিবরণ কখনও কখনও ভাল সমাধান হয় তবে এটি সাধারণ লিপ-নির্দিষ্ট হতে পারে)
  • অনিরাপদ ডেটা মূল্যায়নের সাথে শেষ করা খুব সহজ (যদিও এটি বেশিরভাগ ক্ষেত্রে রক্ষা করা যেতে পারে)।

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


এমনকি এটি জিজ্ঞাসা করা প্রশ্নের সমাধান করার চেষ্টাও করে না, "এই ভয়টি জনপ্রিয় সংস্কৃতির অংশ হয়ে যাওয়ার কোনও historicalতিহাসিক সত্য আছে কি"? দেখুন কিভাবে উত্তর দিতে
মশা

0

মিনস্কির সোসাইটি অফ মাইন্ডের Chapter.৪ অধ্যায়ে তিনি বলেছেন

নেই এক উপায় একটি মন নিজেই দেখতে এবং এখনও কি ঘটছে ট্র্যাক রাখতে জন্য। মস্তিষ্ককে দুটি অংশে ভাগ করুন, এ এবং বি। এ-মস্তিষ্কের ইনপুট এবং আউটপুটগুলিকে আসল বিশ্বের সাথে সংযুক্ত করুন - যাতে সেখানে কী ঘটে তা বুঝতে পারে। তবে বি-মস্তিষ্ককে বাইরের বিশ্বের সাথে মোটেই সংযুক্ত করবেন না; পরিবর্তে এটি সংযুক্ত করুন যাতে A- মস্তিষ্ক হ'ল B-brain এর পৃথিবী!

যখন একটি প্রোগ্রাম (খ) অন্য একটি প্রোগ্রাম (এ) লিখে তখন এটি মেটা-প্রোগ্রাম হিসাবে কাজ করে। বি এর বিষয়বস্তু প্রোগ্রাম এ।

একটি সি প্রোগ্রাম আছে। আপনার মাথায় এটিই প্রোগ্রাম বি লিখেছেন B.

বিপদটি হ'ল মন্দ উদ্দেশ্য নিয়ে কেউ (সি ') থাকতে পারে, যিনি এই প্রক্রিয়াটিতে হস্তক্ষেপ করতে পারেন, তাই আপনি এসকিউএল-ইনজেকশন জাতীয় জিনিস পান।

চ্যালেঞ্জটি হ'ল সফটওয়্যারটিকে আরও বিপজ্জনক না করে আরও স্মার্ট করে তোলা।


দুটি উঁচু, এবং দুটি ডাউনভোটস। দেখে মনে হচ্ছে এটি কোনও নার্ভকে আঘাত করে।
মাইক ডুনলাভে

0

আপনার এখানে অনেক ভাল উত্তর রয়েছে এবং মূল কারণটি স্পষ্টভাবে যে স্বেচ্ছাসেবী কোড কার্যকর করা খারাপ মিম্মকেয় তবে আমি অন্য একটি কারণকে যুক্ত করব যা অন্যরা কেবলমাত্র প্রান্তে ছুঁয়েছে:

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

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