আমি একক-উদ্ধৃতি দিয়ে এবং একক-কোট দিয়ে আশেপাশের ব্যবহারকারীর ইনপুটটি ফেলে এসকিউএল ইঞ্জেকশন থেকে রক্ষা করতে পারি?


139

আমি বুঝতে পেরেছি যে প্যারামিটারাইজড এসকিউএল কোয়েরিগুলি ব্যবহারকারী ইনপুট রয়েছে এমন প্রশ্নের নির্মাণের সময় ব্যবহারকারীর ইনপুটকে স্যানিটাইজ করার সর্বোত্তম উপায়, তবে আমি ভাবছি যে ব্যবহারকারী ইনপুট নেওয়া এবং কোনও একক উদ্ধৃতি থেকে বেরিয়ে আসা এবং একক উদ্ধৃতি সহ পুরো স্ট্রিংকে ঘিরে is কোডটি এখানে:

sSanitizedInput = "'" & Replace(sInput, "'", "''") & "'"

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

আমরা মাইক্রোসফ্ট এসকিউএল সার্ভার 2000 ব্যবহার করছি, যার জন্য আমি বিশ্বাস করি যে একক-উদ্ধৃতি হ'ল স্ট্রিং ডিলিমিটার এবং স্ট্রিং ডিলিমিটার থেকে বেরিয়ে আসার একমাত্র উপায়, সুতরাং ব্যবহারকারীর মধ্যে যে কোনও কিছু কার্যকর করার কোনও উপায় নেই।

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

এই কোডটিতে কি সমস্যা আছে? এই স্যানিটাইজেশন কৌশলটি পেরিয়ে যাওয়ার জন্য কি কোনও এসকিউএল ইঞ্জেকশন আক্রমণ পাওয়ার উপায় আছে? এই কৌশলটি ব্যবহার করে এমন নমুনা ব্যবহারকারীর ইনপুটটি খুব সহায়ক হবে।


হালনাগাদ:

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

এবং একক-উদ্ধৃতি থেকে বেরিয়ে আসা বন্ধ করার কোনও উপায় না থাকলে, ব্যবহারকারীর বাকী ইনপুটটির কোনওটিই কার্যকর করা হবে না কারণ এটি সমস্তই একটি স্বতন্ত্র স্ট্রিং হিসাবে নেওয়া হবে।

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


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

আমি একই কোডটিতে কাজ করছি কিন্তু স্ট্রিংটি এড়িয়ে যাওয়ার চেষ্টা করছি এবং কোয়েরিটি বাসাতে পেরেছি বলে @ পাট্রিক এদিকে এসেছেন। আপনি কি কখনও এটি খুঁজে বের করতে পারেন?
3herk1ll

1
@ 3 তীরক 1 ই চেষ্টা না করাই সেরা, আপনি প্যারামিটারাইজড এসকিউএল ব্যবহার করা ভাল: Blog.codinghorror.com/…
প্যাট্রিক

@ পেট্রিক, আমি আক্রমণকারীদের দৃষ্টিকোণ থেকে এটি এগিয়ে আসছি!
থের্ক 1 ই

উত্তর:


87

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

পয়েন্টটি হ'ল, আপনি যে কোনও ব্ল্যাকলিস্ট করেন (এবং অত্যধিক অনুমতিযুক্ত শ্বেত তালিকা) বাইপাস করা যায়। আমার কাগজের শেষ লিঙ্কটি এমন পরিস্থিতি দেখায় যেখানে এমনকি উদ্ধৃতি থেকে বেরিয়ে আসা যেতে পারে sed

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

এটি করার সঠিক উপায়:

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

2
সঠিকভাবে ব্যবহৃত হলে, ডায়নামিক এসকিউএল এবং স্ট্রিং কনটেনটেশন নিরাপদে প্যারামিটারাইজড কোয়েরি (যেমন sp_executesqlপরিবর্তে EXEC) ব্যবহার করা যেতে পারে । এটি হ'ল আপনি এতক্ষণ দীর্ঘস্থায়ীভাবে আপনার এসকিউএল স্টেটমেন্ট জেনারেট করতে পারবেন যতক্ষণ না কনট্যাকেটেড টেক্সট ব্যবহারকারীর কাছ থেকে আসে। এর পারফরম্যান্স সুবিধাও রয়েছে; sp_executesqlক্যাচিং সমর্থন করে।
ব্রায়ান

2
@ ব্রায়ান, ভাল ডু :)। কিন্তু বাস্তবে, আপনি প্রোগ্রামাররা কত ঘন ঘন এটি দেখতে পান? তদ্ব্যতীত, গতিশীল এসকিউএল "প্রয়োজনীয়" যে সাধারণ দৃশ্যের প্রয়োজন হয় তার অনুসন্ধানের অংশ হিসাবে অনুমিতভাবে ব্যবহারকারী ইনপুট প্রয়োজন (অনুমিত)। আপনি যদি sp_executesql করতে পারতেন তবে আপনার (সাধারণত) প্রথম স্থানে গতিশীল এসকিএল প্রয়োজন হবে না।
এভিডি

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

1
@ এলরনোকোকো নিশ্চিত, তবে আমি এটিকে ছাড় দেব না , যেহেতু আমি এটিকে
বুনোতে দেখেছি

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

41

ঠিক আছে, এই প্রতিক্রিয়াটি প্রশ্নের আপডেটের সাথে সম্পর্কিত হবে:

"যদি এই স্যানিটাইজেশন পদ্ধতির বিরুদ্ধে এসকিউএল ইনজেকশন আক্রমণ চালানোর কোনও নির্দিষ্ট উপায় সম্পর্কে কেউ জানে তবে আমি এটি দেখতে পছন্দ করব।"

এখন, মাইএসকিউএল ব্যাকস্ল্যাশ পলায়ন ছাড়াও - এবং আমরা যে এমএসএসকিউএল সম্পর্কে আসলে কথা বলছি তা বিবেচনায় নিয়ে আসলে এসকিউএল এখনও আপনার কোড ইনজেকশনের সম্ভাব্য 3 টি উপায় আছে

sSanitizedInput = "" "& প্রতিস্থাপন (sInput," "", "" "") & "" "

এগুলি সব সময়ে বৈধ হবে না এবং এটি আপনার চারপাশের প্রকৃত কোডের উপর খুব নির্ভর করে:

  1. দ্বিতীয় আদেশ-এসকিউএল ইনজেকশন - যদি পালানোর পরে ডাটাবেস থেকে উদ্ধার করা তথ্যের ভিত্তিতে যদি কোনও এসকিউএল কোয়েরি পুনর্নির্মাণ করা হয় , তবে ডেটাটি আনসেকটেড করা হয় এবং অপ্রত্যক্ষভাবে এসকিউএল-ইনজেকশন হতে পারে। দেখা
  2. স্ট্রিং ট্র্যাঙ্কেশন - (কিছুটা জটিল) - পরিস্থিতি হ'ল আপনার দুটি ক্ষেত্র রয়েছে, একটি ব্যবহারকারী নাম এবং পাসওয়ার্ড বলুন এবং এসকিউএল তাদের উভয়কেই সম্মতি জানায়। এবং উভয় ক্ষেত্রের (বা কেবল প্রথম) দৈর্ঘ্যের একটি কঠোর সীমা রয়েছে। উদাহরণস্বরূপ, ব্যবহারকারীর নামটি 20 টি অক্ষরের মধ্যে সীমাবদ্ধ। বলুন আপনার কাছে এই কোড রয়েছে:
username = left(Replace(sInput, "'", "''"), 20)

তারপরে আপনি যা পান - তা হল ব্যবহারকারীর নাম, পালানো এবং তারপরে 20 টি অক্ষরে ছাঁটাই। এখানে সমস্যা - আমি আমার উক্তিটি 20 তম চরিত্রের মধ্যে আবদ্ধ করব (উদাহরণস্বরূপ 19 ক এর পরে), এবং আপনার পালানোর উদ্ধৃতিটি ছাঁটা হবে (একুশতম অক্ষরে)। তারপরে এসকিউএল

sSQL = "select * from USERS where username = '" + username + "'  and password = '" + password + "'"

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


28

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


2
যদি আপনাকে "গুগল ফিউশন টেবিল" এর মতো কিছু নিয়ে কাজ করতে হয় তবে আফিকা, এর উপভাষাকে সমর্থন করার মতো কোনও বিমূর্ত গ্রন্থাগার নেই? তুমি কি পরামর্শ দাও?
সিস্টেমে

20

আমি বুঝতে পেরেছি যে প্রশ্নটি জিজ্ঞাসা করার পরে এটি অনেক দীর্ঘ, তবে ..

'উদ্ধৃতি যুক্তি' পদ্ধতির উপর আক্রমণ চালানোর এক উপায় স্ট্রিং ট্রাঙ্কেশন। এমএসডিএন অনুসারে, এসকিউএল সার্ভার 2000 এসপি 4 (এবং এসকিউএল সার্ভার 2005 এসপি 1) এ খুব দীর্ঘ স্ট্রিংটি নিঃশব্দে কেটে যাবে।

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

এটি সম্ভবত কোনও 'ব্যবহারকারীর অ্যাডমিন' পৃষ্ঠা দৃশ্যে কার্যকর হবে যেখানে আপনি 'আপডেট' বিবৃতিটি যে সমস্ত চেক করার কথা বলেছিলেন তা না করার জন্য অপব্যবহার করতে পারেন।

সুতরাং আপনি যদি সমস্ত যুক্তি উদ্ধৃত করার সিদ্ধান্ত নিয়ে থাকেন তবে নিশ্চিত হয়ে নিন যে স্ট্রিং মাপগুলির সাথে কী চলছে এবং আপনি এটি কাটাচ্ছেন না তা দেখুন into

আমি পরামিতি সঙ্গে যেতে সুপারিশ করব। সর্বদা. আমি ইচ্ছা করি আমি এটি ডাটাবেসে প্রয়োগ করতে পারি। এবং পার্শ্ব প্রতিক্রিয়া হিসাবে, আপনি আরও ভাল ক্যাশে হিট পাওয়ার সম্ভাবনা বেশি কারণ বেশিরভাগ বিবৃতি একই দেখায়। (এটি অবশ্যই ওরাকল 8 এ সত্য ছিল)


1
পোস্ট করার পরে, আমি সিদ্ধান্ত নিয়েছিলাম যে আভিডির পোস্ট এটি এবং আরও বিস্তারিতভাবে কভার করে। আশা করি আমার পোস্টটি এখনও কারও সহায়ক হবে।
জার্ন জেনসেন

10

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

নিজেই এটি নিরাপদ আফাইক AI অন্য একজন উত্তরদাতাকে যেমন উল্লেখ করা হয়েছে, তবে আপনাকে ব্যাকস্পেস থেকে বেরিয়ে আসাও মোকাবেলা করতে হতে পারে (যদিও এসকিউএল সার্ভারে ADO বা ADO.NET ব্যবহার করে কোয়েরিটি পাস করার পরে নয়, কমপক্ষে - সমস্ত ডাটাবেস বা প্রযুক্তিগুলির জন্য প্রমাণ দেওয়া যাবে না)।

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

তবে বেশিরভাগ ক্ষেত্রে, প্যারামিটার বাইন্ডিং হ'ল উপায় - এটি কেবল সহজ।


2
আপনি নিজের প্রশ্ন তৈরি করে থাকলেও আপনি প্যারামিটার বিকল্প ব্যবহার করতে পারেন।
নিক জনসন

1
আপনার স্ক্র্যাচ থেকে এসকিউএল স্টেটমেন্ট স্ট্রিং তৈরি করা উচিত, তবে এখনও প্যারামিটার বিকল্প ব্যবহার করুন।
জিবিবি

না, স্ক্র্যাচ থেকে আপনার এসকিউএল বিবৃতি কখনও তৈরি করবেন না।
এভিডি

8

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


4
আর তুমি যে মিস্ যখন এক মামলার এক করছি pwnd ইনপুট, আপনি।
ব্রায়ানএইচ

4
"কিছু লোক, যখন কোনও সমস্যার মুখোমুখি হয়, তখন" আমি জানি, আমি নিয়মিত অভিব্যক্তি ব্যবহার করব think "এখন তাদের দুটি সমস্যা রয়েছে think
মিকিফগেইন_পূর্বএক্সিটঅফসো

1
@ এমকিফ আমি জানি যে এটি একটি সাধারণ অনুভূতি তবে সত্যিই আপনি যখন এগুলি বন্ধ করেন তবে নিয়মিত প্রকাশগুলি খুব দুর্দান্ত হয়।
tom.dietrich

@ tom.dietrich এটি সর্বদা বাস্তব জীবনের পরিস্থিতির উপর নির্ভর করে। F.ex. regexpr সিনট্যাক্স মানসম্মত নয় তাই সাধারণভাবে আমি প্রসঙ্গে যেখানে regexpr ব্যবহার করার বিরুদ্ধে পরামর্শ দেব যেখানে বিভিন্ন সিস্টেম একসাথে কাজ করার জন্য সংহত করা হয়। এর কারণ হ'ল বিভিন্ন রেগেক্সপ্রিন ইঞ্জিনগুলি রেজিএক্সফারগুলিকে আলাদাভাবে মূল্যায়ন করে এবং আরও গুরুত্বপূর্ণভাবে এই শক্ত তথ্যটি সাধারণত ডাউনপ্লেড বা উপেক্ষা করা হয় যা বিকাশকারীদেরকে কামড় না দেওয়া পর্যন্ত এই অসম্পূর্ণতাগুলির যত্ন নেবে না। এরকম প্রচুর অসম্পূর্ণতা রয়েছে; f.ex. দেখুন নিয়মিত-expressions.info/shorthand.html ( flavorsসেই পৃষ্ঠায় সন্ধান করুন)।
সান্টিবাইলার্স

6

আপনার জানা হিসাবে মনে হচ্ছে এটি একটি খারাপ ধারণা।

এই জাতীয় স্ট্রিটে উদ্ধৃতিটি পালানোর মতো কি সম্পর্কে: \ '

আপনার প্রতিস্থাপনের ফলাফল হবে: would ''

যদি ব্যাকস্ল্যাশ প্রথম উদ্ধৃতিটি অতিক্রম করে, তবে দ্বিতীয় উদ্ধৃতিটি স্ট্রিংটি শেষ করেছে ended


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

6

সহজ উত্তর: এটি কখনও কখনও কাজ করবে তবে সমস্ত সময় নয়। আপনি সাদা-তালিকা বৈধতা ব্যবহার করতে চান সবকিছু আপনি কি করতে, কিন্তু আমি বুঝতে পারছি তাই আপনি সেরা অনুমান কালোতালিকা সঙ্গে যেতে বাধ্য করছেন সবসময় সম্ভব, না। অনুরূপভাবে, আপনি parametrized সঞ্চিত procs ব্যবহার করতে চান সবকিছু , কিন্তু একবার আবার, যে সবসময় সম্ভব, তাই আপনি পরামিতি সাথে ব্যবহারের sp_execute করতে বাধ্য করছি।

ব্যবহারযোগ্য কৃষ্ণাঙ্গ তালিকার চারপাশে এমন কয়েকটি উপায় রয়েছে যার সাথে আপনি আসতে পারেন (এবং কিছু শ্বেত তালিকাও)।

একটি শালীন লেখার ব্যবস্থা এখানে রয়েছে: http://www.owasp.org/index.php/Top_10_2007-A2

আপনার যদি সত্যিকারের স্থানে জায়গা দেওয়ার জন্য দ্রুত সমাধান হিসাবে এটি করার দরকার হয় তবে তা করুন। তবে নিজেকে নিরাপদ মনে করবেন না।


6

এসকিউএল-ইনজেকশন থেকে নিরাপদ থাকার জন্য এটি করার দুটি উপায় রয়েছে, ব্যতিক্রম নয় no বিবৃতি প্রস্তুত বা সঞ্চিত প্রক্রিয়া প্রস্তুত।


4

যদি আপনার কাছে প্যারামিটারাইজড প্রশ্নগুলি উপলভ্য থাকে তবে আপনি সেগুলি সর্বদা ব্যবহার করা উচিত। নেট থেকে স্লিপ করা একটি ক্যোয়ারির জন্য এটি যা লাগে তা হ'ল আপনার ডিবি ঝুঁকিতে রয়েছে।


4

হ্যাঁ, কেউ এখুনি অবধি কাজ করা উচিত যতক্ষণ না কেউ SET QUOTED_IDENTIFIER OFF চালায় এবং আপনার উপর ডাবল উদ্ধৃতি ব্যবহার না করে।

সম্পাদনা করুন: এটি দূষিত ব্যবহারকারীকে উদ্ধৃত শনাক্তকারীদের বন্ধ করার অনুমতি না দেওয়ার মতো সহজ নয়:

এসকিউএল সার্ভার নেটিভ ক্লায়েন্ট ওডিবিসি ড্রাইভার এবং এসকিউএল সার্ভারের জন্য এসকিউএল সার্ভার নেটিভ ক্লায়েন্ট ওএলডি ডিবি সরবরাহকারী সংযোগ করার সময় স্বয়ংক্রিয়ভাবে QUOTED_IDENTIFIER সেট করে। এটি ওডিবিসি ডেটা উত্সগুলিতে, ওডিবিসি সংযোগ বৈশিষ্ট্যগুলিতে বা ওএলই ডিবি সংযোগ বৈশিষ্ট্যগুলিতে কনফিগার করা যেতে পারে। ডিবি-লাইব্রেরি অ্যাপ্লিকেশনগুলি থেকে সংযোগের জন্য SET QUOTED_IDENTIFIER এর ডিফল্ট অফ।

যখন কোনও সঞ্চিত পদ্ধতি তৈরি করা হয়, তখন SET QUOTED_IDENTIFIER এবং SET ANSI_NULLS সেটিংস ক্যাপচার করা হয় এবং পরবর্তীকালে সেই সঞ্চিত পদ্ধতির অনুরোধের জন্য ব্যবহৃত হয়

SET QUOTED_IDENTIFIER এছাড়াও ALTER DATABASE এর QUOTED_IDENTIFER সেটিংয়ের সাথে মিলে যায়।

SET QUOTED_IDENTIFIER পার্স সময় নির্ধারণ করা হয়েছে । পার্স সময় নির্ধারণের অর্থ হ'ল যদি এসইটি স্টেটমেন্টটি ব্যাচ বা সঞ্চিত পদ্ধতিতে উপস্থিত থাকে, কোড কার্যকরভাবে সেই পর্যায়ে পৌঁছায় কিনা তা নির্বিশেষে এটি কার্যকর হয়; এবং এসইটি বিবৃতি কার্যকর হওয়ার আগে কোনও বিবৃতি কার্যকর হয়।

আপনার অগত্যা এটি না জেনে অনেকগুলি উপায় রয়েছে QUOTED_IDENTIFIER be স্বীকারোক্তিপূর্ণ - এটি ধূমপানের বন্দুকগুলি আপনি অনুসন্ধান করছেন তা নয়, তবে এটি একটি দুর্দান্ত আক্রমণাত্মক পৃষ্ঠ। অবশ্যই, আপনি যদি ডাবল উক্তিগুলি থেকে রক্ষা পান - তবে আমরা যেখানে ফিরে এসেছি সেখানে ফিরে এসেছি। ;)


1
এটি কাজ করতে পারে, তবে আবার, যখন সমস্ত ব্যবহারকারীর ইনপুট একক উদ্ধৃতি দ্বারা বেষ্টিত থাকে তখন তারা কীভাবে সেই কোডটি কার্যকর করতে পারে? উপরের কোডে এসকিউএল ইনজেক্ট করতে সক্ষম কোডের একটি নির্দিষ্ট লাইন (গুলি) খুব সহায়ক হবে। ধন্যবাদ!
প্যাট্রিক

4

আপনার প্রতিরক্ষা ব্যর্থ হবে যদি:

  • ক্যোয়ারী স্ট্রিংয়ের পরিবর্তে একটি সংখ্যা আশা করছে is
  • একটি একক উদ্ধৃতি চিহ্ন উপস্থাপনের অন্য কোনও উপায় ছিল, সহ:
    • একটি পালানোর ক্রম যেমন \ 039
    • একটি ইউনিকোড চরিত্র

(পরবর্তী ক্ষেত্রে, এটি এমন কিছু হতে হবে যা আপনার প্রতিস্থাপনটি সম্পন্ন করার পরেই প্রসারিত হবে)


4

প্যাট্রিক, আপনি কি সমস্ত ইনপুট, এমনকি সংখ্যার ইনপুট চারপাশে একক উদ্ধৃতি যোগ করছেন? যদি আপনার কাছে সংখ্যার ইনপুট থাকে তবে আপনি তার চারপাশে একক উদ্ধৃতি রাখছেন না, তবে আপনার এক্সপোজার রয়েছে।


1

ব্যবহারকারীর ইনপুটটির সমস্ত স্যানিটাইজেশন কী কুৎসিত কোড হবে! তারপরে এসকিউএল স্টেটমেন্টের জন্য ক্লানকি স্ট্রিংবিল্ডার। প্রস্তুত বিবৃতি পদ্ধতিতে অনেক ক্লিনার কোডের ফলাফল হয় এবং এসকিউএল ইনজেকশন সুবিধাগুলি সত্যিই দুর্দান্ত সংযোজন।

এছাড়াও চাকা পুনরুদ্ধার কেন?


1

একক উদ্ধৃতিটিকে দুটি একক উদ্ধৃতিতে পরিবর্তনের পরিবর্তে কেন কেবল এটিকে অ্যাডোস্ট্রোফ, একটি উদ্ধৃতিতে পরিবর্তন করা বা এটি সম্পূর্ণরূপে অপসারণ করবেন না?

যেভাবেই হোক না কেন, এটি কিছুটা ক্লডজ ... বিশেষত যখন আপনার বৈধভাবে এমন জিনিস থাকে (নামগুলির মতো) যা একক উদ্ধৃতি ব্যবহার করতে পারে ...

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


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

-1

আপনি যদি এমন একটি সমাধান খুঁজে পেতে পারেন যা স্ট্রিংয়ের জন্য কাজ করে তবে সংখ্যার পূর্বাভাসের জন্য আপনাকে এটিও নিশ্চিত করতে হবে যে তারা কেবল সংখ্যায় উত্তীর্ণ হয়েছে (সাধারণ চেকটি কি এটি অন্তর্ / দ্বিগুণ / দশমিক হিসাবে পার্স করা যায়?)।

এটি অনেক অতিরিক্ত কাজ।


-2

এটি কার্যকর হতে পারে তবে এটি আমার কাছে একটু হকি মনে হচ্ছে। আমি পরিবর্তে একটি নিয়মিত অভিব্যক্তির বিরুদ্ধে এটি পরীক্ষা করে প্রতিটি স্ট্রিং বৈধ কিনা তা যাচাই করার পরামর্শ দেব।


-3

হ্যাঁ, আপনি যদি পারেন,

বিষয়টি অধ্যয়ন করার পরে, আমি মনে করি যে আপনি প্রস্তাবিত হিসাবে ইনপুট স্যানিটাইজড নিরাপদ তবে কেবল এই বিধিগুলির অধীন:

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

    • এসকিউএল স্টেটমেন্টগুলি যাচাই করতে সমস্যাযুক্ত
  2. আপনি হয় nvarchar/ ncharকলামগুলি (এবং প্রিফিক্স স্ট্রিং লিটারেলগুলি সহ N) ব্যবহার করুন বা মানগুলি varchar/ charকলামগুলিতে ASCII অক্ষরগুলিতে সীমাবদ্ধ করুন (যেমন এসকিউএল বিবৃতি তৈরি করার সময় ব্যতিক্রম নিক্ষেপ করুন)

    • এইভাবে আপনি CHAR (700) থেকে CHAR (39) এ স্বয়ংক্রিয়ভাবে অ্যাডোস্ট্রো রূপান্তর এড়ানো হবে (এবং সম্ভবত অন্যান্য ইউনিকোড হ্যাক)
  3. আপনি প্রকৃত কলাম দৈর্ঘ্যের সাথে ফিট করার জন্য সর্বদা মান দৈর্ঘ্যকে বৈধতা দিন (বেশি দিন ব্যতিক্রম বাদ দিন)

    • এসকিউএল সার্ভারে একটি ত্রুটি ছিল কাটা কাটা উপর নিক্ষিপ্ত এসকিউএল ত্রুটি বাইপাস করার অনুমতি দেয় (নিঃশব্দ কাটাতে নেতৃত্ব)
  4. আপনি SET QUOTED_IDENTIFIERসবসময় যে নিশ্চিতON

    • সাবধান, এটি পার্স-টাইমে কার্যকর হয়, এমনকি কোডের অ্যাক্সেসযোগ্য বিভাগেও

এই 4 টি পয়েন্টের সাথে সম্মতি রেখে আপনার নিরাপদ থাকা উচিত। আপনি যদি এগুলির কোনওটি লঙ্ঘন করেন তবে এসকিউএল ইঞ্জেকশনের জন্য একটি রাস্তা খোলে।


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

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

ঠিক আছে, কখন (যদি না) আপনার সিস্টেমে আপোস হয় তবে দয়া করে ফিরে আসুন এবং এই উত্তরটি মুছুন .... বা আপনি প্যারামাইট্রাইজড কোয়েরি ব্যবহার করতে পারেন।
হোগান

@ হোগান - এটি করতে আমার কোনও সমস্যা নেই :) তবে বর্তমানে আমি দাবি করি যে আপনি আমার পোস্ট করা 4 টি নিয়মাবলী যদি পালন করেন তবে এটিকে ঘিরে দেখার কোনও সঠিক উপায় নেই। আপনি যদি সত্যিই মনে করেন যে এর চারপাশে কোনও উপায় আছে তবে কেবল কোথায় কোথায় তা নির্দেশ করুন।
মিরোক্লাভ

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