কীভাবে পিএইচপি-তে ডাটাবেস পাসওয়ার্ড সুরক্ষিত করবেন?


404

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


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

1
আপনি কি সংকেত স্ট্রিং ব্যবহার করা ব্যবহারকারীর পাসওয়ার্ড বা ডাটাবেস পাসওয়ার্ড বলতে চান?
ওজগুর ওজসিটাক

4
সংযোগের স্ট্রিংয়ে ব্যবহৃত ডাটাবেস পাসওয়ার্ড। ধন্যবাদ!
ব্যবহারকারী 18359

উত্তর:


238

বেশ কয়েকটি ব্যক্তি কীভাবে একটি ডাটাবেসে পাসওয়ার্ড সংরক্ষণ করবেন তা একটি প্রশ্ন হিসাবে এটি ভুল ব্যাখ্যা করে। এটা ভুল। এটা কিভাবে পাসওয়ার্ড আপনি পেতে দেয় সঞ্চয় করতে হয় করতে ডাটাবেস।

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


8
ধন্যবাদ। যদি আমি এটি সঠিকভাবে বুঝতে পারি তবে পিএইচপি ফাইলটির কনফিগারেশন ফাইলটিতে পাসওয়ার্ড ব্যবহারের অনুমতি দেওয়া হবে। উদাহরণস্বরূপ, আমি 'app1_db_cfg.php' নামে একটি ফাইল তৈরি করি যা লগইন, পাঠ, এবং ডিবি নাম সংরক্ষণ করে। তারপরে আমার অ্যাপ্লিকেশন.এফপি পৃষ্ঠায় 'app1_db_cfg.php' অন্তর্ভুক্ত রয়েছে এবং আমি ব্যবসায় আছি!
ব্যবহারকারী 18359

28
আমি সম্মত হই যে কনফিগারেশনটি সঠিকভাবে সুরক্ষিত করা দরকার। তবে এটি কীভাবে করা যায় তা বিকাশকারীদের নয়, সিস্টেম প্রশাসকদের ব্যবসা। আমি এক্ষেত্রে শক্তিশালী এনক্রিপশনের মান সম্পর্কে একমত নই। আপনি যদি নিজের কনফিগারেশন ফাইলটি সুরক্ষা দিতে না পারেন তবে কী কী আপনি নিজের কীগুলি সুরক্ষিত রাখতে পারবেন বলে মনে করেন?
ব্যবহারকারী 11318

10
আমি এমন একটি ডেটাবেস অ্যাকাউন্ট ব্যবহার করতে পছন্দ করি যা কেবলমাত্র ওয়েব সার্ভার থেকে ডাটাবেস অ্যাক্সেসের জন্য অনুমোদিত। এবং তারপরে আমি কনফিগারেশনটি এনক্রিপ্ট করতে বিরক্ত করব না, আমি এটি কেবল ওয়েব মূলের বাইরে সঞ্চয় করি।
gnud

11
আমি পাথ সেট করতে অ্যাপাচি এনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করি যাতে উত্স কোডটিতে ফাইলের পথও অজানা থাকে। এটাও চমত্কারভাবে কি এ্যাপাচি সেটিংসের উপর serverm উপর ভিত্তি করে উন্নয়ন ও উৎপাদনের জন্য একটি ভিন্ন পাসওয়ার্ড থাকার অনুমতি দেয়
geedew

15
দয়া করে মনে রাখবেন যে এমনকি ওয়েব অ্যাক্সেসযোগ্য ডিরেক্টরির বাইরে থাকা ফাইলগুলিকে অবশ্যই তাদের ব্যবহৃত স্ক্রিপ্টটি পড়তে হবে। যদি কেউ সেই ফাইলটি অন্তর্ভুক্ত করে তবে ফাইল থেকে ডেটা ফেলে দেয়, তারা পাসওয়ার্ডটি দেখতে পাবে।
রিক ম্যাক গিলিস

104

যদি আপনি অন্য কারও সার্ভারে হোস্টিং করে থাকেন এবং আপনার ওয়েবরটের বাইরে অ্যাক্সেস না পেয়ে থাকেন তবে আপনি সর্বদা একটি পাসওয়ার্ড এবং / অথবা ডাটাবেস সংযোগ একটি ফাইলে রাখতে পারেন এবং তারপরে একটি .htaccess ব্যবহার করে ফাইলটি লক করতে পারেন:

<files mypasswdfile>
order allow,deny
deny from all
</files>

3
ধন্যবাদ, আমি ঠিক এটিই খুঁজছিলাম।
ডেভিড গ্ল্যাডফেলার

28
অবশ্যই, তবে কারও শেল অ্যাক্সেস থাকলে আপনার পুরো অ্যাকাউন্টটি যাইহোক আপস করা হয়েছে।
কেলেন

4
এটি খারাপ অনুশীলন কারণ আপনি ভুলবশত কোনও শংসাপত্রের কাছে আপনার শংসাপত্রগুলি প্রতিশ্রুতিবদ্ধ হতে পারেন।
পোরলুন

2
@ অঙ্কিত: যদি অ-বান্ধব পক্ষে সার্ভারে কোনও ফাইল আপলোড করা এবং এটি চালানো সম্ভব হয় তবে সার্ভারটি সঠিকভাবে কনফিগার করা যায় না।
কেলেন

6
@ পারলিউন: বিকাশকারীদের তাদের সংস্করণ নিয়ন্ত্রণ ব্যবস্থাটি পাসওয়ার্ড ফাইলটিকে উপেক্ষা করা উচিত, অর্থাত্ একটি .gitignore ব্যবহার করে। তবে হ্যাঁ, সংবেদনশীল ডেটা রয়েছে এমন ফাইলগুলির সাথে যত্ন নেওয়া উচিত।
কেলেন

45

সর্বাধিক সুরক্ষিত উপায় হ'ল আপনার পিএইচপি কোডে নির্দিষ্টভাবে তথ্য নির্দিষ্ট না করা।

যদি আপনি অ্যাপাচি ব্যবহার করেন তবে এর অর্থ আপনার httpd.conf বা ভার্চুয়াল হোস্ট ফাইল ফাইলটিতে সংযোগের বিশদ সেট করা। যদি আপনি এটি করেন যে আপনি কোনও প্যারামিটার ছাড়াই mysql_connect () কল করতে পারেন, যার অর্থ পিএইচপি কখনই আপনার তথ্য আউটপুট দেয় না।

আপনি এই ফাইলগুলিতে এই মানগুলি কীভাবে নির্দিষ্ট করেন:

php_value mysql.default.user      myusername
php_value mysql.default.password  mypassword
php_value mysql.default.host      server

তারপরে আপনি আপনার মাইএসকিএল সংযোগটি এভাবে খুলুন:

<?php
$db = mysqli_connect();

বা এই মত:

<?php
$db = mysqli_connect(ini_get("mysql.default.user"),
                     ini_get("mysql.default.password"),
                     ini_get("mysql.default.host"));

1
Ini_get ( 'ডিফল্ট মান') যথাযথ মান চেক করুন php.net/manual/en/class.mysqli.php
Val,

4
হ্যাঁ, তবে যে কোনও ব্যবহারকারী (বা কোনও হ্যাকার খারাপভাবে লিখিত পিএইচপি স্ক্রিপ্টের অপব্যবহার করছেন) এর মাধ্যমে পাসওয়ার্ডটি পড়তে পারেন ini_get()
Marki555

1
@ মারকি 555 but any user (or a hacker abusing badly written php script) can read the password via ini_get()আপনি কীভাবে এটি মোকাবেলা করবেন?
টোনিক্স

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

2
@ ডিপব্লিউ যদি আপনি ইনজিজেট () ইনজেক্ট করতে পারেন তবে আপনি ফাইল_জেট_কন্টেন্টস (যেকোনওপথ) ইনজেক্ট করতে পারেন। যতক্ষণ পিএইচপি পাসওয়ার্ড পেতে একটি উপায় আছে, তেমনি কোনও দূষিত কোড হবে।
ওয়ারেস

40

ওয়েব রুটের বাইরে কোনও ফাইলে এগুলি সংরক্ষণ করুন।


29
এবং অন্যান্য উত্স নিয়ন্ত্রণের বাইরে যেমন উল্লেখ করা হয়েছে mentioned
ফ্র্যাঙ্ক ফার্মার

6
আমরা এটি অন্তর্ভুক্ত করতে সক্ষম হবে? উদাহরণস্বরূপ, পিএইচপি আমরা তখন কি করতে পারি include('../otherDirectory/configfile.conf')?
এমটিকে

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

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

@ দ্য গডফাদার, রিডমে ফাইল?
পেসারিয়ার

35

অত্যন্ত সুরক্ষিত সিস্টেমের জন্য আমরা একটি কনফিগারেশন ফাইলে ডাটাবেস পাসওয়ার্ড এনক্রিপ্ট করি (যা নিজেই সিস্টেম প্রশাসক সুরক্ষিত)। অ্যাপ্লিকেশন / সার্ভার প্রারম্ভকালে অ্যাপ্লিকেশনটি সিস্টেম প্রশাসককে ডিক্রিপশন কীটির জন্য অনুরোধ করে। এরপরে ডাটাবেস পাসওয়ার্ডটি কনফিগার ফাইল থেকে পড়ে, ডিক্রিপ্ট করা হয় এবং ভবিষ্যতে ব্যবহারের জন্য মেমরিতে সংরক্ষণ করা হয়। এটি 100% সুরক্ষিত নয়, কারণ এটি মেমরির ডিক্রিপ্টে সঞ্চিত রয়েছে, তবে আপনাকে কোনও পর্যায়ে এটি 'যথেষ্ট নিরাপদ' বলতে হবে!


85
অ্যাডমিন মারা গেলে কী হবে?
রাদু মুর্জিয়া

36
@ রাদুমার্জি এটি হাস্যকর। সিস অ্যাডমিনস কখন মারা যাচ্ছে শুনেছেন? তারা ম্যাকডোনাল্ডসের মতো, তারা কোথাও উপস্থিত / অদৃশ্য হয়ে যায়!
ILikeTacos

13
@ রাদু মুর্জিয়া মাত্র ২ বা ততোধিক অ্যাডমিন রাখুন, তবে আপনার পক্ষে সমালোচনা একটি রেইড অ্যারের মতো। একসাথে একাধিক ড্রাইভ ব্যর্থ হওয়ার সম্ভাবনা অনেক কম।
উপাদান 11

5
সার্ভারগুলি পুনরায় আরম্ভ করার বিষয়ে কী? ..Etc.etc এ পাসওয়ার্ড টাইপ করতে অ্যাডমিনকে জাগাতে যে সময় লাগে তা কী? lol
জন হান্ট

1
নিশ্চিত নয় যে আপনি 'স্মৃতিতে সঞ্চিত' দ্বারা কী বোঝাতে চাইছেন। পিএইচপি ওয়েব অ্যাপ্লিকেশনগুলি কোনও পৃষ্ঠা দেখার জন্য পৃথক অনুরোধের প্রতিক্রিয়া জানায়, তার চেয়ে বেশি সময়ের জন্য সাধারণত মেমরিতে কোনও কিছুই সঞ্চয় করে না।
বিডিএসএল

15

এই সমাধানটি সাধারণ, এটি উভয় উন্মুক্ত এবং বদ্ধ উত্স অ্যাপ্লিকেশনগুলির জন্য দরকারী is

  1. আপনার আবেদনের জন্য একটি ওএস ব্যবহারকারী তৈরি করুন। Http://en.wikedia.org/wiki/ প্রিন্সিপাল_মোহাদ_প্রিয়তা দেখুন
  2. পাসওয়ার্ড সহ সেই ব্যবহারকারীর জন্য একটি (অ-সেশন) ওএস পরিবেশ পরিবর্তনশীল তৈরি করুন
  3. অ্যাপ্লিকেশনটি সেই ব্যবহারকারী হিসাবে চালান

সুবিধাদি:

  1. আপনি দুর্ঘটনাক্রমে উত্স নিয়ন্ত্রণে আপনার পাসওয়ার্ডগুলি পরীক্ষা করবেন না, কারণ আপনি পারবেন না
  2. আপনি দুর্ঘটনাক্রমে ফাইল অনুমতিগুলি স্ক্রু আপ করবেন না। ভাল, আপনি সম্ভবত, কিন্তু এটি এটি প্রভাবিত করবে না।
  3. কেবল রুট বা সেই ব্যবহারকারী দ্বারা পঠনযোগ্য be রুট আপনার সমস্ত ফাইল এবং এনক্রিপশন কীগুলি যেভাবেই পড়তে পারে।
  4. আপনি যদি এনক্রিপশন ব্যবহার করেন, কীভাবে আপনি কীটি নিরাপদে সংরক্ষণ করছেন?
  5. এক্স প্ল্যাটফর্ম কাজ করে
  6. অবিশ্বস্ত শিশু প্রসেসগুলিতে এনভ্যাভারটি পাস না করার বিষয়টি নিশ্চিত হন

এই পদ্ধতিটি হেরোকু পরামর্শ দিয়েছেন, যারা খুব সফল।


11

শংসাপত্রগুলি যেখানে সংরক্ষণ করা হয় সেই একই ফাইলে যদি ডাটাবেস সংযোগ তৈরি করা সম্ভব হয়। সংযুক্ত বিবৃতিতে শংসাপত্রগুলি ইনলাইন করুন।

mysql_connect("localhost", "me", "mypass");

অন্যথায় সংযোগের বিবৃতি দেওয়ার পরে শংসাপত্রগুলি আনসেট করা ভাল, কারণ শংসাপত্রগুলি যা মেমরিতে নেই, মেমরি থেকে পড়া যায় না ;)

include("/outside-webroot/db_settings.php");  
mysql_connect("localhost", $db_user, $db_pass);  
unset ($db_user, $db_pass);  

9
কারও কাছে যদি স্মৃতিতে অ্যাক্সেস থাকে তবে আপনি যেভাবেই হোক না কেন খারাপ হয়ে যান। এটি অর্থহীন নকল-সুরক্ষা। ওয়েবরুটের বাইরে (বা কমপক্ষে একটি। Htaccess দ্বারা সুরক্ষিত থাকলে আপনার ওয়েবরোটের উপরে অ্যাক্সেস না থাকলে) কেবলমাত্র নিরাপদ বিকল্প।
uliwitness

2
@ প্রত্যক্ষদর্শী - এটি বলার মতো যে কেউ আপনার নেটওয়ার্ক অপারেশন সেন্টারের লকটি অ্যাসিটিলিন টর্চ দিয়ে কাটাতে পারে তার অর্থ দরজাটিও নকল সুরক্ষা। সংবেদনশীল তথ্যকে যথাসম্ভবতমতম সুযোগের সাথে আবদ্ধ রাখা বোধগম্য।
লুক এ লেবার

1
প্রতিধ্বনি $ db_user বা printing db_pass মুদ্রণ সম্পর্কে কীভাবে? এমনকি একই দলের বিকাশকারীদেরও উত্পাদন শংসাপত্রগুলি বের করতে সক্ষম হওয়া উচিত নয়। কোডটিতে লগইন তথ্য সম্পর্কে মুদ্রণযোগ্য কিছুই থাকা উচিত।
মোহাম্মদ জোরেদ

8

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

এ ছাড়া আপনি যে অ্যাকাউন্টটি ব্যবহার করছেন তার জন্য ন্যূনতম অ্যাক্সেসের সাথে সঠিক লাইনে রয়েছেন। এটি যোগ করুন

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

পিটার


8

আপনি যদি PostgreSQL ব্যবহার করেন তবে এটি ~/.pgpassস্বয়ংক্রিয়ভাবে পাসওয়ার্ডগুলির জন্য সন্ধান করে। আরও তথ্যের জন্য ম্যানুয়াল দেখুন ।


8

পূর্বে আমরা একটি কনফিগারেশন ফাইলে ডিবি ব্যবহারকারী / পাস সঞ্চয় করেছিলাম তবে ততক্ষণে হিট প্যারানয়েড মোডে - গভীরতায় ডিফেন্সের নীতি গ্রহণ করে

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

আমরা অ্যাপাচি ভার্চুয়ালহস্টে পরিবেশিত ভেরিয়েবলগুলিতে ব্যবহারকারী / পাস সঞ্চয় করতে চলেছি। এই কনফিগারেশনটি কেবল রুট দ্বারা পঠনযোগ্য - আশা করা যায় যে আপনার অ্যাপাচি ব্যবহারকারী রুট হিসাবে চলছে না।

এর সাথে কনসটি হ'ল এখন পাসওয়ার্ডটি একটি গ্লোবাল পিএইচপি ভেরিয়েবলে রয়েছে।

এই ঝুঁকি হ্রাস করতে আমাদের নিম্নলিখিত সতর্কতা অবলম্বন করতে হবে:

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

6

একটি ফাইলের মধ্যে ডাটাবেস পাসওয়ার্ড রাখুন, এটি কেবল কেবল ফাইলগুলি পরিবেশন করা ব্যবহারকারীকে পঠনযোগ্য করে তুলুন।

যদি আপনার পিএইচপি সার্ভার প্রক্রিয়াটিকে ডেটাবেস অ্যাক্সেস করার অনুমতি দেওয়ার কিছু উপায় না থাকে তবে আপনি যা করতে পারেন এটি এটি যথেষ্ট পরিমাণে।


5

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

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


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

5

এটি কোনওভাবে কোনও কনফিগার ফাইলে রাখার উপায়টি সাধারণত এটি হয়ে যায়। কেবল আপনি নিশ্চিত করুন:

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

5

আমরা এটি এইভাবে সমাধান করেছি:

  1. অন্যান্য পাসওয়ার্ড সার্ভার থেকে মুক্ত সংযোগ সহ সার্ভারে মেমক্যাচ ব্যবহার করুন।
  2. পাসওয়ার্ড (বা এমনকি সমস্ত পাসওয়ার্ড.এইচপিপি ফাইল এনক্রিপ্ট করা) প্লাস ডিক্রিপ্ট কীতে মেমশেচে সংরক্ষণ করুন।
  3. ওয়েব সাইট, পাসওয়ার্ড ফাইল পাসফ্রেজ ধারণ করে মেমকেচে কী বলে এবং সমস্ত পাসওয়ার্ডকে মেমরিতে ডিক্রিপ্ট করে।
  4. পাসওয়ার্ড সার্ভার প্রতি 5 মিনিটে একটি নতুন এনক্রিপ্ট করা পাসওয়ার্ড ফাইল প্রেরণ করে।
  5. আপনি যদি আপনার প্রকল্পে এনক্রিপ্ট করা পাসওয়ার্ড.ফ্প ব্যবহার করে থাকেন তবে আপনি একটি নিরীক্ষা রেখেছেন, এই ফাইলটি বাহ্যিকভাবে স্পর্শ করা হয়েছে কিনা - বা দেখেছেন check এটি যখন ঘটে তখন আপনি স্বয়ংক্রিয়ভাবে মেমরিটি পরিষ্কার করতে পারবেন, পাশাপাশি অ্যাক্সেসের জন্য সার্ভারটি বন্ধ করতে পারেন।

4

একটি অতিরিক্ত কৌশল হ'ল পিএইচপি পৃথক কনফিগারেশন ফাইল ব্যবহার করা যা দেখতে দেখতে:

<?php exit() ?>

[...]

Plain text data including password

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

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


তবে কীভাবে পিএইচপি স্ক্রিপ্ট ফাইলটিতে সঞ্চিত শংসাপত্রগুলি পড়ে?
ক্রিস্টোফার মাহান

3
আপনি নিয়মিত পাঠ্য ফাইলের মতো ফোপেন () ব্যবহার করেন।
ই-সন্তুষ্ট 23'09

2
@ ই-সন্তুষ্ট ঠিক আছে এটি হ্যাকারকে করতে বাধা দেবে require/ includeতবে কীভাবে প্রতিরোধ করবে fopen?
dmnc

"এটি আপনাকে অ্যাক্সেসের নিয়মগুলি সঠিকভাবে সেট করতে বাধা দেয় না"
ই-সন্তুষ্ট

@ ই-সন্তুষ্ট, এটি বেশ চালাক। কেন কেউ এটি ভেবে দেখেনি? যাইহোক , এখনও সম্পাদক অনুলিপি সমস্যা ঝুঁকির। feross.org/cmsploit
পেসারিয়ার

4

সবচেয়ে ভাল উপায় হ'ল পাসওয়ার্ডটি একেবারে না সঞ্চয় করা!
উদাহরণস্বরূপ, আপনি যদি উইন্ডোজ সিস্টেমে থাকেন এবং এসকিউএল সার্ভারের সাথে সংযোগ স্থাপন করেন তবে আপনি বর্তমান প্রক্রিয়াটির পরিচয় ব্যবহার করে পাসওয়ার্ড ছাড়াই ডাটাবেসের সাথে সংযোগ করতে ইন্টিগ্রেটেড প্রমাণীকরণ ব্যবহার করতে পারেন।

আপনাকে একটি পাসওয়ার্ড, প্রথম এর সাথে যুক্ত করতে হবে তাহলে এনক্রিপ্ট এটা, শক্তিশালী এনক্রিপশন ব্যবহার করে (যেমন হবে AES-256 ব্যবহার করে, এবং তারপর এনক্রিপশন কী রক্ষা, অথবা যা নিশ্চিতভাবে ঘটবে রক্ষা সামঁজস্যহীন এনক্রিপশন ব্যবহার করে এবং OS আছে), এবং তারপর একটি এ সঞ্চয় শক্তিশালী এসিএল সহ কনফিগারেশন ফাইল (ওয়েব ডিরেক্টরিের বাইরে) ।


3
আবার পাসওয়ার্ড এনক্রিপ্ট করার কোনও মানে নেই । যে কেউ এনক্রিপ্ট না করা পাসওয়ার্ড পেতে পারে সে পাসওয়ার্ডটি ডিক্রিপ্ট করার জন্য যা পাসফ্রেজের প্রয়োজন তা পেতে পারে। তবে এসিএল এবং .htaccess ব্যবহার করা ভাল ধারণা।
uliwitness

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

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

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

6
@ অভিডি কীভাবে আসুন ওএস কী কী সুরক্ষা দিতে পারে তবে ডেটা নিজেই নয়? উত্তর: এটি উভয়কে রক্ষা করতে পারে, সুতরাং এনক্রিপশন সত্যই সহায়তা করে না। এটি পৃথক হবে যদি কেবলমাত্র ডেটা সংরক্ষণ করা হয় এবং এনক্রিপশন কী উত্পন্ন হয়, উদাহরণস্বরূপ, কোনও পাসওয়ার্ড থেকে যা ব্যবহারকারীকে টাইপ করতে হয়েছিল।
মারিওভিলাস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.