আমি কীভাবে .git ডিরেক্টরি পরিবেশন থেকে অ্যাপাচি প্রতিরোধ করব?


74

আমি পরীক্ষার জন্য ওয়েবসাইট স্থাপনের জন্য গিট ব্যবহার শুরু করেছি। .Git ডিরেক্টরি বিষয়বস্তু পরিবেশন করা থেকে আমি কীভাবে অ্যাপাচি প্রতিরোধ করব?

আমি চেষ্টা করেছিলাম

<Directorymatch "^/.*/\.svn/">
Order deny,allow
Deny from all
</Directorymatch>

কোন সাফল্য ছাড়া।

আমি জানি যে আমি প্রতিটি .git ডিরেক্টরিতে একটি .htaccess ফাইল তৈরি করতে এবং অ্যাক্সেস অস্বীকার করতে পারি, তবে আমি এমন কিছু কিছু চেয়েছিলাম যা আমি মুখ্য কনফিগার ফাইলে রাখতে পারি যা এই ওয়েবসাইটটিকে সমস্ত ওয়েবসাইট জুড়ে বিশ্বব্যাপী করে তোলে।


3
একবার আপনি যদি ডিরেক্টরিকে পরিবেশন করা থেকে অ্যাপাচি আটকাতে পারেন তবে আপনি যদি আপনার ডিরেক্টরিতে সূচিগুলি সক্ষম করে থাকেন তবে "ইনডেক্সআইগনোর .git" দিয়ে .git ডিরেক্টরিটি আড়াল করতেও পারেন।
রায়ান

উত্তর:


55

এটি কাজ করছে না কারণ আপনার নিয়মে 'গিট' নেই। আপনাকে যা করতে হবে তা হ'ল 'গিট' দিয়ে 'এসএনএন' প্রতিস্থাপন করা।

<Directorymatch "^/.*/\.git/">
Order deny,allow
Deny from all
</Directorymatch>

1
আমি যখন আপনার কোডটি সহ একটি .htaccess তৈরি করি তখন আমি ত্রুটি পাই: "<ডিরেক্টরীম্যাচটি এখানে অনুমোদিত নয়"
শোয়ান

2
এটি আপাচে কনফিডে থাকতে হবে। দেখুন: httpd.apache.org/docs/1.3/mod/core.html#directorymatch
sinping

2
সবচেয়ে সহজ <DirectoryMatch /\.git/>
রেগেক্সটি

নিখুঁত সমাধানের জন্য এটি পরীক্ষা করে দেখুন magento.stackexchange.com
প্রতীক

1 ম, গাইতে / ওপি ধন্যবাদ। নোট করুন যে অ্যাপাচি ২.৪-এ "অর্ডার করুন, অস্বীকার করুন" এবং পরবর্তী লাইনটি "প্রয়োজনীয় সমস্ত অস্বীকৃতি" দ্বারা প্রতিস্থাপিত হয়েছে। এছাড়াও উপরোক্ত "অ্যাপাচি কনফ" নামক অনেকগুলি ফাইলের নাম দেওয়া হয়েছে "httpd.conf" --- সিঙ্গিংয়ের ব্যবহার কেবল একটি নৈমিত্তিক বক্তব্য ছিল, সুতরাং সেই আক্ষরিক নামটি অনুসন্ধান করবেন না (সম্ভবত বলা ছাড়া চলবে, তবে আপনি কখনই জানেন না লোকেরা কীভাবে এটি পড়তে পারে)।
কেভিন_কিনসে

139

এটি অন্যান্য উত্তরগুলির মতো একই প্রভাব ফেলে তবে এটি খুব সহজ:

RedirectMatch 404 /\.git

এটি .htaccessআপনার সার্ভার কনফিগারেশন ফাইলের মধ্যে যেতে পারে । এটি কোনও ফাইল বা ডিরেক্টরি লুকিয়ে রাখে যার নাম দিয়ে শুরু হয় .git(উদাহরণস্বরূপ .gitডিরেক্টরি বা .gitignoreফাইল) 404 ফিরিয়ে দিয়ে So


2
আমি এই সমাধানটি সত্যিই পছন্দ করি। এটি সহজ এবং মার্জিত।
শোয়ান

2
এটিকে মূল htdocs ডিরেক্টরিতে রেখে দেওয়া একটি বিশ্বব্যাপী কাজও করে।
জোর

4
এই বিকল্পটিও সেরা পছন্দ করুন। আমার কাছে মনে হয় যে /.git বা /.gitignore এর অনুরোধের জন্য 404 ফেরত দেওয়া আরও সুরক্ষিত যাতে গিটটি এমনকি ব্যবহৃত হচ্ছে তাও বাইরে থেকে নির্ধারণ করা যায় না।
এজরা ফ্রি

2
সচেতন থাকুন যে আপনার যদি ডিরেক্টরি তালিকা সক্ষম করে থাকে তবে .gitফোল্ডারগুলি এখনও দৃশ্যমান হবে, তবে আপনি যখন এগুলি অ্যাক্সেস করার চেষ্টা করবেন তখন 404 পাবেন।
অ্যান্ডি ম্যাজ 4'16

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

13

আপনি যদি .htaccess ফাইল ব্যবহার না করেন তবে এর পরিবর্তে .git ডিরেক্টরি এবং .gitignore ফাইল উভয়কে আড়াল করতে /etc/apache2/httpd.conf (বা আপনার সার্ভারের মাস্টার কনফ ফাইলটিই হোক) ব্যবহার করতে চান, আপনি নিম্নলিখিতটি ব্যবহার করতে পারেন। আমি উপরের উত্তরটি পেয়েছি মাস্টার কনফারেন্স সেটিংয়ের জন্য গিটিগনোর ফাইলটি আড়াল করে নি।

# do not allow .git version control files to be issued
<Directorymatch "^/.*/\.git+/">
  Order deny,allow
  Deny from all
</Directorymatch>
<Files ~ "^\.git">
    Order allow,deny
    Deny from all 
</Files>

1
www.example.com/.git/configঅ্যাপাচি httpd 2.4.27 এ ফাইলটি আটকাবেন না।
ইলহান

12

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

RewriteEngine On
RewriteRule "^(.*/)?\.git/" - [F,L]

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

6
### never deliver .git folders, .gitIgnore
RewriteRule ^(.*/)?\.git+ - [R=404,L]

# 2nd line of defense (if no mod_rewrite)
RedirectMatch 404 ^(.*/)?\.git+

এটি কাজ করে .htaccess, কোনও http.confঅ্যাক্সেসের প্রয়োজন নেই। এটিকে পুনর্লিখনের নিয়মের প্রথম হিসাবে অন্তর্ভুক্ত করুন। শুরুতে যোগ Rewrite Onপ্রয়োজন হবে।

সুরক্ষা কোণ থেকে, আমি 403 এর চেয়ে 404 বোগস পছন্দ করি, আক্রমণকারীর কাছে আরও তথ্যবহুল। দু'জনের মধ্যে একজনকে মন্তব্য করুন, তা নিশ্চিত করতে অন্যটি আপনার পক্ষেও কাজ করে।

বিটিডব্লিউ, ভাল পরিবর্তনগুলি হ'ল, দুজনের জন্য আপনার লিথমাস পরীক্ষাটি হ'ল:

http://localhost/.gitignore
http://localhost/.git/HEAD

উভয় নিয়ম আছে কেন? সরল পুনঃনির্দেশ ম্যাচটি নিজেরাই যথেষ্ট ices (এছাড়াও, রাজশক্তিগুলি একেবারে ঠিক বলে মনে হচ্ছে না - শেষের দিকে প্লাস কেন?)
বেনেট ম্যাকেলভি

ব্যক্তিগত পরানোয়া / দ্বিগুণ সুরক্ষা। যদি রাইরাইটেঞ্জাইন বন্ধ হয়ে যায় (কেন্দ্রীয় কনফিগারেশন পরিবর্তনগুলি, দুর্বল দল যোগাযোগ, দুর্ভাগ্যজনক সার্ভার "আপডেট", ... আপনি এটির নাম দিন :-) + অপ্রচলিত বা একটি $, ভাল পয়েন্ট হওয়া উচিত! (পরীক্ষার জন্য সময় নেই, দুঃখিত))
ফ্রাঙ্ক নোক

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

লিটমাস পরীক্ষার জন্য +1।

5

.Git ডিরেক্টরি এবং .htaccess ব্যবহার করে .gitignore এবং .gitmodules হিসাবে অন্য ফাইল উভয় সুরক্ষিত করতে, ব্যবহার করুন:

RewriteEngine On
RewriteRule ^(.*/)?\.git+ - [F,L]
ErrorDocument 403 "Access Forbidden"

4
আমার জন্য কাজ করে, তবুও পিছনে ত্রুটিযুক্ত ডকুমেন্টের কোনও প্রভাব নেই। সুরক্ষা কোণ থেকে, আমি হামলাকারীর কাছে একটি তথ্যবহুল 403 এর চেয়ে একটি বগাস 404 কল্পনা করতাম ...
ফ্রাঙ্ক নোক

1
এটি একটি খারাপ ধারণা, কারণ এটি হ্যাকারদের কাছে তথ্য প্রকাশ করে। একটি 403 এর অর্থ এটি রয়েছে, একটি 404 এর অর্থ এটি নেই। সার্ভারের সেটআপের প্রতিটি তথ্য হ্যাকারের উপযোগী। আমি এটি সংশোধন বিবেচনা করব।
জেরার্ডজেপি

3

আমি সর্বদা নীচের লাইনটি ভোস্ট টেম্পলেটটিতে যুক্ত করি

RedirectMatch 404 /\\.(svn|git|hg|bzr|cvs)(/|$)

কেউ নিশ্চিত না যে কোনও ভিসিএসের নির্দিষ্ট ডেটা অ্যাক্সেস করতে পারে না। নিখুঁত কাজ করে।


1

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

এটি অন্যান্য ওয়েবসার্ভারের সাথে কাজ করা উচিত এবং কর্মক্ষমতা গ্রহণকারী .htaccess ফাইলগুলিতে নির্ভর করে না।


1

যারা লিনাক্স বিতরণে সমস্ত "লুকানো" ফাইল এবং ডিরেক্টরিগুলি (সাধারণত "" "দিয়ে শুরু করা সমস্ত ফাইল) অস্বীকার করতে চান তাদের জন্য, সার্ভারের কনফারেন্স প্রসঙ্গে রাখলে অ্যাপাচি ২.৪-এ কী কাজ করা হয়েছে তা এখানে:

<FilesMatch "^\.(.*)$">
    Require all denied
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Require all denied
</DirectoryMatch>

এবং এখানে পুরানো অ্যাপাচি ২.২ স্টাইল রয়েছে (একই রেজেেক্স, কেবলমাত্র পৃথক লেখকের দিকনির্দেশনা):

<FilesMatch "^\.(.*)$">
    Order deny,allow
    Deny from all
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    Order deny,allow
    Deny from all
</DirectoryMatch>

তারপরে আপনাকে বিশেষভাবে .gitবা উদ্বিগ্ন হওয়ার দরকার নেই .svn। এটি মত .htaccessএবং .htpasswdসহজাতভাবে জিনিস মেলে ।

ব্যক্তিগতভাবে, আমি 404s এর পরিবর্তে এই জাতীয় অনুরোধের জন্য 403 গুলি জারি করতে চাই, তবে আপনি সহজে লেখার অস্বীকারের পরিবর্তে একটি রাইরাইটরুল ব্যবহার করতে পারেন, যেমন:

<FilesMatch "^\.(.*)$">
    RewriteRule "^(.*)$" - [R=404,L]
</FilesMatch>
<DirectoryMatch "/\.(.*)">
    RewriteRule "^(.*)$" - [R=404,L]
</DirectoryMatch>

0

আপনি সম্ভবত পরিবেশন অস্বীকার করতে চান .gitignore

বিন্দু দিয়ে শুরু হওয়া ফাইলগুলি লিনাক্সে লুকানো থাকে।

সুতরাং, বিন্দু দিয়ে শুরু হওয়া মাত্র 404

RedirectMatch 404 /\.


0

এটি কিছুটা দেরি হলেও আমার উত্তরটি কিছুটা আলাদা তাই আমি ভেবেছিলাম এটি যুক্ত করব add এটি অবশ্যই httpd.conf ফাইলে যেতে হবে। <Files "*">ভিতরে নেস্টেড <Directory>ট্যাগ ডিরেক্টরির মধ্যে সব ফাইল অবরোধ করবে।

# GitHub Directory
<Directory /var/www/html/yoursite/.git>
   Order Deny,Allow
   Deny from all
   <Files "*">
     Order Deny,Allow
     Deny from all
   </Files>
</Directory>
# GitHub files
<Files .gitignore>
  order Deny,Allow
  Deny from all
</Files>
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.