Apache2: 'AH01630: ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์'


429

ฉันได้รับข้อผิดพลาดนี้เมื่อพยายามเข้าถึง localhost ผ่านเบราว์เซอร์

AH01630: client denied by server configuration

ฉันตรวจสอบการอนุญาตของโฟลเดอร์ไซต์โดยใช้:

sudo chmod 777 -R *

นี่คือไฟล์กำหนดค่าของฉัน:

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /home/user-name/www/myproject
<Directory />
    Options FollowSymLinks
    AllowOverride all
    Allow from all
</Directory>

<Location />
  Allow from all
  Order Deny,Allow
</Location>

<Directory  /home/user-name/www/myproject/>
    Options Indexes FollowSymLinks MultiViews
    AllowOverride all
    Order allow,deny
    Allow from all
</Directory>

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
    AllowOverride all
    Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
    Order allow,deny
    Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride all
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>


1
คุณใช้ Apache 2.4 ใหม่หรือไม่ เส้นทางใดให้ข้อผิดพลาดนั้น
ป้อมปราการ

12
ดูเหมือนว่าคุณต้องอัปเดตการกำหนดค่าของคุณ ดูที่นี่: httpd.apache.org/docs/2.4/upgrading.html#run-time
aadel


7
chmod 777เป็นนิสัยที่แย่มากถึงแม้ว่าจะถูกใช้ในตัวอย่างเท่านั้น
Antonis Christofides

3
chmod 777 ไม่เคยมีคำตอบ
Aaron McMillin

คำตอบ:


770

หากคุณใช้ Apache 2.4

คุณต้องตรวจสอบการอนุญาตและปฏิเสธกฎ

ลองดูhttp://httpd.apache.org/docs/2.4/upgrading.html#access

ใน 2.2 การควบคุมการเข้าถึงตามชื่อโฮสต์ของไคลเอนต์ที่อยู่ IP และลักษณะอื่น ๆ ของคำขอของลูกค้าได้ทำโดยใช้คำสั่งสั่งอนุญาตอนุญาตปฏิเสธและตอบสนอง

ใน 2.4 การควบคุมการเข้าถึงดังกล่าวกระทำในลักษณะเดียวกับการตรวจสอบการอนุญาตอื่น ๆ โดยใช้โมดูลใหม่ mod_authz_host

คำสั่งใหม่ต้องการ :

2.2 การกำหนดค่า:

Order allow,deny
Allow from all

2.4 การกำหนดค่า:

Require all granted

อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ apache หลังจากการเปลี่ยนแปลงเหล่านี้ ( # service httpd restart)


2
งานของ OSX 10.10 โยเซมิตีโดยใช้ Apache 2.4
Matthew Herbst

2
การกำหนดค่าของสิ่งที่ (เช่นสถานที่ที่ไม่ "ต้องได้รับทุกคน" ไปในไฟล์ .conf บาง?)
อเล็กซิส

1
@Alexis ไดเรกทอรี (หรือตำแหน่ง) ดูภาพหน้าจอในคำตอบต่อไป
strangeman

2
ในกรณีของฉันฉันมีข้อผิดพลาดในDocumentRootและ<Directory>เส้นทาง
Roman Grinyov

4
สิ่งหนึ่งที่ควรทราบ: ถ้าคุณจะหมายถึงการกำหนดค่าออนไลน์โอกาสที่พวกเขาเคยใช้ทั้งสองและOrder allow,deny ... Require all grantedมันจะไม่ทำงาน จำเป็นต้องมีเพียงหนึ่งในสิ่งเหล่านี้ขึ้นอยู่กับรุ่นของคุณ นั่นคือสิ่งที่หยุดฉันจากการแก้ไขปัญหาของฉันในตอนแรก
Vishnu Narang

299

สำหรับไดเรกทอรีทั้งหมดเขียนRequire all grantedแทนAllow from all สิ่งที่ต้องการ

ปรับปรุง

หากข้างต้นใช้งานไม่ได้ให้ลบบรรทัดด้านล่างนี้ด้วย:

คำสั่งอนุญาต, ปฏิเสธ


14
ทำงานให้ฉันเมื่อฉันลบOrder allow,denyบรรทัดเช่นกัน
kasperd

เรียนในขณะที่ใช้HTTPS , การกำหนดค่าVirtualHostสำหรับพอร์ต443ผมต้องทำซ้ำ configs เดียวกัน <Location /media> Require all granted </Location>บนdefault-ssl.confสำหรับ CSS ของฉันที่จะโหลด (ปัญหาของฉันคือว่าหน้าการเข้าสู่ระบบสามารถเข้าถึงได้ แต่ไม่มีไฟล์ CSS หรือไฟล์สื่ออื่น ๆ โหลด ... )
yuric

1
งานของ OSX 10.10 โยเซมิตีโดยใช้ Apache 2.4
Matthew Herbst

7
ฉันเป็นคนเดียวที่เกลียดเมื่อมีคนทำลายการกำหนดค่า Apache โดยไม่มีผลลัพธ์ใด ๆ ในบันทึก (เฮ้บอยAllow from Allถูกปลดออกเพราะ .... เหตุผล ... )
Warren P

ขอบคุณ - ลบ "อนุญาตให้สั่งซื้อ, ปฏิเสธ" ช่วย
srvy

34

ตรวจสอบอีกครั้งว่าเส้นทาง DocumentRoot นั้นถูกต้อง ที่อาจทำให้เกิดข้อผิดพลาดนี้


3
โดยเฉพาะอย่างยิ่งฉันพบว่านี่เป็นปัญหาของฉันเพราะฉันไม่มีเครื่องหมายสแลชต่อท้ายในการประกาศ DocumentRoot ของฉัน แต่ใช้หนึ่งใน<Directory>บล็อก ฉันยังมีความแตกต่างบางกรณี เมื่อฉันสร้างสองค่าสำเนาคาร์บอนของกันและกัน (โดยไม่มีเครื่องหมายสแลช) มันทำงานได้อย่างสมบูรณ์แบบ
Adam Tuttle

หากเป็นกรณีนี้ (ใช่ก็เกิดขึ้นที่นี่ .... ) คุณสามารถค้นหาสาย follwing ในapache/logs/error.log:AH00112: Warning: DocumentRoot [E:/xampp/htdocs/website/frontend/web] does not exist
Piemol

ไม่สามารถเชื่อได้ว่าฉันสามารถหาคำตอบสำหรับข้อผิดพลาดที่พิมพ์ผิดได้เช่นกัน :-) ขอบคุณที่นำมันออกมาปัญหาของฉันคือเส้นทางที่ไม่ถูกต้องในไฟล์ conf ของฉัน
Taher

21

ฉันทำการเปลี่ยนแปลงแบบเดียวกันกับที่ ravisorg แนะนำให้ใช้กับ OSX 10.10 Yosemite ที่อัพเกรด Apache เป็นเวอร์ชั่น 2.4 ด้านล่างนี้คือการเปลี่ยนแปลงที่ถูกเพิ่มเข้าไปใน http.conf

<Directory />
    AllowOverride none
    Require all denied
</Directory>

<Directory /Volumes/Data/Data/USER/Sites/>
    AllowOverride none
    Require all granted
</Directory>

11

สิ่งนี้ทำให้ฉันบ้าคลั่งอย่างแน่นอนเป็นเวลาครึ่งวัน แต่ฉันพบวิธีแก้ปัญหาหากวิธีแก้ปัญหาอื่น ๆ ทั้งหมดได้พยายามไม่สำเร็จ

นี่สำหรับ macOS

  • ไปที่กิจกรรมการตรวจสอบ (การค้นหาที่น่าสนใจสำหรับ: กิจกรรม)
  • ในการตรวจสอบกิจกรรมค้นหา httpd ซึ่งเป็นบริการ Apache
  • เลือกอันที่เป็นของรูทแล้วคลิก X ที่มุมบนซ้ายเพื่อปิด

ณ จุดนี้ฉันหยุดรับข้อผิดพลาด 403 ทันทีและทุกอย่างเริ่มทำงานตามที่คาดไว้ สิ่งแปลกคือฉันไม่ต้องรีสตาร์ท apache มันเพิ่งทำงานฉันเดามันรีสตาร์ทตัวเองเมื่อฉันไปที่ localhost ของฉันฉันสุจริตไม่รู้ แต่ฉันเดาว่าปัญหาคือ Apache ไม่รีสตาร์ทจริงเมื่อใช้รีสตาร์ท apachectl หรือ หยุดหรือเริ่ม หวังว่านี่จะช่วยใครซักคน


1
หลังจากเสียเวลาหลายชั่วโมงนี่คือสิ่งที่แก้ไขปัญหาของฉันด้วย
ever.wakeful

10

ปัญหานี้อยู่ใน VirtualHost แต่อาจเป็นไปไม่ได้

ต้องได้รับอนุญาตทั้งหมด

ยืนยันของคุณตั้งค่าถูกต้องนี่คือตัวอย่างที่ถูกต้อง ป้อนคำอธิบายรูปภาพที่นี่


รวมถึง<Directory ...> ... </Directory>บรรทัดที่ใช้งานได้สำหรับฉันตั้งแต่ฉันใช้เส้นทางไดเรกทอรีที่ไม่ได้กำหนดไว้ก่อนหน้านี้ในการกำหนดค่า Apache มาก่อน
Don Wilson

4

หากคุณจัดทำบันทึกข้อผิดพลาดและโหลดหน้าซ้ำคุณควรเห็นข้อมูลเพิ่มเติมเกี่ยวกับปัญหาที่แน่นอน

คว้าตัวแปรสภาพแวดล้อมเพื่อให้ $ {APACHE_LOG_DIR} ใช้งานได้จริง ...

source /etc/apache2/envvars

จากนั้นไปดูและ ...

tail -f ${APACHE_LOG_DIR}/error.log

5
นี่เป็นข้อผิดพลาดจากบันทึก: 'AH01630: ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์'
Hazem Hagrass

คุณอาจต้องการตรวจสอบสิ่งนี้: httpd.apache.org/docs/2.4/upgrading.html#accessและสิ่งนี้: stackoverflow.com/questions/12759854/…
Shylo Hana

6
หากคุณเพิ่มLogLevel debugไปยัง VirtualHost นี่เป็นคำแนะนำที่ดีเนื่องจากคุณจะเห็นบรรทัดเช่น "ต้องการทั้งหมดที่ถูกปฏิเสธ: ถูกปฏิเสธ" และ "<RequireAny>: ถูกปฏิเสธ" (เช่นมีประโยชน์มากกว่า "ไคลเอ็นต์ถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์", ในขณะที่มันจะบอกคุณซึ่งการตั้งค่า)!
คาร์เรนคุก

4

ฉันได้รับการแก้ไขตัวเองหลังจากใช้เวลาสองสามชั่วโมง

ฉันติดตั้ง Apache / 2.4.7 (Ubuntu) ผ่าน coookbook ใน vagrant vm

ไฟล์ /etc/apache2/apache2.conf ไม่มี<VirtualHost *:80>องค์ประกอบตามค่าเริ่มต้น

ฉันทำการเปลี่ยนแปลงสองครั้งเพื่อให้เสร็จ

  1. ที่เพิ่ม <VirtualHost *:80>
  2. เพิ่ม
    ตัวเลือกดัชนี FollowSymLinks
    AllowOverride ทั้งหมด
    อนุญาตทั้งหมด

จากนั้นในที่สุดฉันเพิ่งบูต vm ..


4

มีใครคิดเกี่ยวกับค่าเริ่มต้นเซิร์ฟเวอร์ wamp ที่ไม่รวมhttpd-vhosts.confไฟล์ แนวทางของฉันคือการลบบันทึกด้านล่าง

 conf
  # Virtual hosts
  Include conf/extra/httpd-vhosts.conf

ในhttpd.confไฟล์ นั้นคือทั้งหมด.


+1 นี้ทำงานให้ฉันเช่นกัน แต่อาจจะเป็นทางออกที่ดีคือการเก็บconf/extra/httpd-vhosts.confไฟล์และแทนที่มันRequire localด้วยRequire all granted
อเล็กซ์ Pandrea

4

ในกรณีของฉัน

ฉันใช้ macOS Mojave (Apache / 2.4.34) มีปัญหาในการตั้งค่าโฮสต์เสมือนที่ไฟล์ /etc/apache2/extra/httpd-vhosts.conf หลังจากเพิ่มแท็กไดเรกทอรีที่ต้องการปัญหาของฉันหายไป

ต้องได้รับอนุญาตทั้งหมด

หวังว่าโครงสร้างการติดตั้งโฮสต์เสมือนทั้งหมดจะช่วยคุณได้

<VirtualHost *:80>
    DocumentRoot "/Users/vagabond/Sites/MainProjectFolderName/public/"
    ServerName project.loc

    <Directory /Users/vagabond/Sites/MainProjectFolderName/public/>
        Require all granted
    </Directory>

    ErrorLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-error_log"
    CustomLog "/Users/vagabond/Sites/logs/MainProjectFolderName.loc-access_log" common
</VirtualHost>

สิ่งที่คุณต้องทำคือแทนที่ MainProjectFolderName ด้วย ProjectFolderName ที่แน่นอนของคุณ


2

นี่ทำให้ฉันบ้า ในที่สุดก็พบว่าปัญหาคืออะไร: ฉันใช้เส้นทางโดยตรงสำหรับบันทึกข้อผิดพลาดและพวกเขาผิด

ทำไม Apache ให้ข้อความแสดงข้อผิดพลาดที่คลุมเครือ (และไม่ถูกต้อง) ใช้ข้อความแสดงข้อผิดพลาดที่ถูกต้องและมีประโยชน์เช่น: เส้นทางสำหรับ ErrorLog directive "/wrong/path/and/filename.log" ไม่ถูกต้อง

อย่างไรก็ตามเพื่อแก้ไขให้แน่ใจว่าคำสั่งบันทึกข้อผิดพลาดของคุณมีลักษณะดังนี้:

ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

2

หากคุณใช้ Apache 2.4 ใน WampServer บน windows OS

คุณต้องเปิดไฟล์https-vhosts.confใน notepad

C:\wamp64\bin\apache\apache2.4.37\conf\extra\https-vhosts.conf 

หากคุณไม่พบไฟล์ด้านบน ตรวจสอบภาพหน้าจอด้านล่าง Wampserver apacche 2.4 httpd-vhosts

 <VirtualHost *:80>
     ServerName localhost
     DocumentRoot c:/wamp64/www
     <Directory  "c:/wamp64/www/">
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Require local
    </Directory>
</VirtualHost>

ในรหัสข้างต้นแทนที่

Require local

กับ

Require all granted

และบันทึกไว้ เริ่มบริการ Apache แล้วลองอีกครั้ง


2

สำหรับฉันฉันได้อัปเดตกฎอนุญาตและปฏิเสธตามมาตรฐาน 2.4 แล้ว

Require all granted

อย่างไรก็ตามนี่ยังทำให้ฉันได้รับข้อผิดพลาด AH01630 เดียวกัน ฉันพบเธรดอื่นและแนะนำให้ติดตั้ง apache2 อีกครั้ง ยังไงก็เถอะมันก็ใช้งานได้! หากใครสนใจที่จะอธิบายว่าทำไมมันจะเป็นประโยชน์

ให้เครดิตกับ: AH01630: ลูกค้าถูกปฏิเสธโดยการกำหนดค่าเซิร์ฟเวอร์ แต่ต้องได้รับการอนุญาตทั้งหมด (Apache 2.4, CentOs)


1

หากคุณมีโฮสต์ https แล้วอย่าลืมทำการRequire all grantedเปลี่ยนแปลง ssl config ด้วย

นอกจากนี้บางครั้งก็มีประโยชน์ในการตรวจสอบสิทธิ์ในฐานะผู้ใช้ apache:

# ps -eFH | grep http # get the username used by httpd
...
apache   18837  2692  0 119996 9328   9 10:33 ?        00:00:00     /usr/sbin/httpd -DFOREGROUND
# su -s/bin/bash apache # switch to that user
bash-4.2$ whoami
apache
bash-4.2$ cd /home
bash-4.2$ ls
bash-4.2$ cd mysite.com
bash-4.2$ ls
bash-4.2$ cat file-which-does-not-work.txt

1

สำหรับ Wamp 3 (Apache 2.4) นอกเหนือจากการวางเซิร์ฟเวอร์ออนไลน์ตามที่อธิบายไว้ในคำตอบอื่น ๆ ในไฟล์โฮสต์เสมือนconf/extra/httpd-vhosts.conf
คุณอาจต้องเปลี่ยน

Require local

กับ

Require all granted



นี้มีผลบังคับใช้ถ้าในhttpd.confคุณมี

Include conf/extra/httpd-vhosts.conf

1

เมื่อใช้ Ubuntu ให้ตรวจสอบว่าเปิดใช้งานโมดูล CGI หรือไม่ ถ้าไม่:

sudo a2enmod cgi

จำเป็นต้องเปิดใช้งานโมดูล CGI โปรแกรมทำงานได้ในที่สุด
Steve R.

1

ตรวจสอบให้แน่ใจว่ามีการกำหนดค่าเฉพาะสำหรับผู้ใช้!

หากไม่มีคำตอบอื่น ๆ ในหน้านี้ให้คุณทำงานนี่คือสิ่งที่ฉันพบหลังจากเวลาผ่านไปหลายชั่วโมง

ผมใช้การกำหนดค่าเฉพาะของผู้ใช้ด้วยการSitesระบุว่าเป็นของฉันในUserDir /private/etc/apache2/extra/httpd-userdir.confอย่างไรก็ตามฉันถูกห้ามไม่ให้เข้าถึงปลายทางhttp://localhost/~jwork/แต่ผมถูกห้ามไม่ให้ปลายทาง

ฉันเห็น/var/log/apache2/error_logว่าการเข้าถึง/Users/jwork/Sites/นั้นถูกบล็อก แต่ผมก็ได้รับอนุญาตให้เข้าถึง DocumentRoot http://localhost/ผ่าน สิ่งนี้แนะนำว่าฉันไม่มีสิทธิ์ดู~jworkผู้ใช้ แต่เท่าที่ฉันสามารถบอกได้โดยps aux | egrep '(apache|httpd)'และlsof -i :80Apache กำลังทำงานสำหรับjworkผู้ใช้ดังนั้นบางสิ่งบางอย่างชัดเจนไม่ได้เขียนด้วยการกำหนดค่าผู้ใช้ของฉัน

ให้ชื่อผู้ใช้jworkนี่คือไฟล์ปรับแต่งของฉัน:

/private/etc/apache2/users/jwork.conf

<Directory "/Users/jwork/Sites/">
    Require all granted
</Directory>

การกำหนดค่านี้ใช้ได้อย่างสมบูรณ์แบบ อย่างไรก็ตามฉันพบว่าการกำหนดค่าผู้ใช้ของฉันไม่ได้ถูกรวม:

/private/etc/apache2/extra/httpd-userdir.conf

## Note how it's commented out by default.
## Just remove the comment to enable your user conf.
#Include /private/etc/apache2/users/*.conf

โปรดทราบว่านี่เป็นเส้นทางเริ่มต้นไปยังไฟล์ userdir conf แต่ตามที่คุณเห็นด้านล่างจะสามารถกำหนดค่าhttpd.confได้ ตรวจสอบให้แน่ใจว่าเปิดใช้งานบรรทัดต่อไปนี้:

/private/etc/apache2/httpd.conf

Include /private/etc/apache2/extra/httpd-userdir.conf

# ...

LoadModule userdir_module libexec/apache2/mod_userdir.so

1

สำหรับผู้ที่ติดอยู่ที่ข้อผิดพลาดนี้เป็นฉันและไม่มีอะไรช่วยจากด้านบน: ตรวจสอบว่าโฟลเดอร์ปัญหาจาก error.log มีอยู่จริงบนเซิร์ฟเวอร์ของคุณ Django ถูกสร้างโดยอัตโนมัติในสถานที่ที่ไม่ถูกต้อง (ถูกยุ่งกับรูตแบบคงที่แล้วmanage.py collectstatic) ไม่มีความคิดว่าเหตุใดจึงไม่สามารถระบุข้อผิดพลาดได้อย่างถูกต้อง


ขอบคุณที่เตือนให้ฉันใช้สมองแก้ปัญหาให้ฉัน +1 ฮ่าฮ่า
orangecaterpillar

0

ข้างๆที่หายไปOrderและAllowคำสั่งที่กล่าวถึงในคำตอบอื่น ๆ โปรดทราบว่าการแสดงออกปกติของDirectoryMatchคำสั่งไม่ตรงกันอาจทำให้เกิดข้อผิดพลาดนี้

หากเส้นทางที่ร้องขอคือ/home/user-foo1bar/www/myproject/การจับคู่การจับคู่ไม่ตรง

<DirectoryMatch "/home/user-[a-z]+/www/myproject/">
...
</DirectoryMatch>

ดังนั้นแม้การกำหนดค่าการเข้าถึงที่ถูกต้องอาจทำให้เกิดข้อผิดพลาดนี้


0

หนึ่งคลุมเครือ (เพิ่งจัดการกับมัน) แต่เป็นไปได้สาเหตุของสิ่งนี้คือกฎ mod_rewrite ภายในในไฟล์ config หลัก (ไม่ใช่. htaccess) ที่เขียนไปยังเส้นทางที่มีอยู่ที่รากของระบบไฟล์เซิร์ฟเวอร์ สมมติว่าคุณมี/mediaไดเรกทอรีในไซต์ของคุณและคุณเขียนสิ่งนี้:

RewriteRule /some_image.png /media/some_other_location.png

หากคุณมี/mediaไดเรกทอรีที่รูทของเซิร์ฟเวอร์ของคุณการเขียนใหม่จะพยายามทำเช่นนั้น (ส่งผลให้เกิดข้อผิดพลาดถูกปฏิเสธการเข้าถึง) แทนที่จะเป็นไดเรกทอรีหนึ่งในไดเรกทอรีไซต์ของคุณเนื่องจากรูทของระบบไฟล์ถูกตรวจสอบโดย mod_rewrite ของไดเรกทอรีแรกในเส้นทางหน้าไดเรกทอรีไซต์ของคุณ


0

ปัญหาอาจเกิดจากไดเรกทีฟไม่อยู่ใน <Directory>

https://httpd.apache.org/docs/2.4/mod/mod_authz_host.html#requiredirectives

คำสั่งสามารถอ้างอิงได้ในส่วน <Directory>, <Files> หรือ <Location> รวมถึงไฟล์. htaccess เพื่อควบคุมการเข้าถึงส่วนต่าง ๆ ของเซิร์ฟเวอร์ การเข้าถึงสามารถควบคุมได้ตามชื่อโฮสต์ของลูกค้าหรือที่อยู่ IP


0

ฉันมีอีกอันที่อาจเป็นประโยชน์กับใครบางคน ได้รับข้อความแสดงข้อผิดพลาดเดียวกันหลังจากอัปเกรดจาก PHP 5.6 => 7.0 เราได้เปลี่ยนการตั้งค่าอัพโหลด PHP และลืมเปลี่ยนเมื่อคัดลอกมา แม้ว่าฉันจะไม่ได้อัปโหลดภาพในขณะนั้น Silverstripe (CMS ของเรา) ก็ปฏิเสธที่จะบันทึกและโยนข้อผิดพลาดนั้น เพิ่มขนาดการอัพโหลดรูปภาพและใช้งานได้ทันที


0

ในกรณีนี้จะช่วยให้ทุกคน Googling รอบเหมือนผมผมก็มีข้อผิดพลาดนี้พยายามที่จะเข้าถึงไฟล์ SVG บนเซิร์ฟเวอร์ของฉันเช่นhttps://example.com/images/file.svg ไฟล์ประเภทอื่น ๆ ดูเหมือนจะดีเพียง SVG ก็ล้มเหลว

ฉันตามล่าหา/etc/httpdไฟล์ conf และตรวจสอบrequire all deniedการกำหนดค่าทุกประเภทและไม่พบว่าการกำหนดค่าใดที่มีผลกระทบนี้

ฉันเปลี่ยน LogLevel เพื่อตรวจแก้จุดบกพร่องในการกำหนดค่า VirtualHost และสามารถดูการบันทึก mod_authz_core ที่ระบุว่ามี 'ต้องการทั้งหมดปฏิเสธ' มีผล:

[Mon Jun 10 13:09:54.321022 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of Require all denied: denied
[Mon Jun 10 13:09:54.321038 2019] [authz_core:debug] [pid 23459:tid 140576341206784] mod_authz_core.c(817): [client 127.0.0.1:54626] AH01626: authorization result of <RequireAny>: denied
[Mon Jun 10 13:09:54.321082 2019] [authz_core:error] [pid 23459:tid 140576341206784] [client 127.0.0.1:54626] AH01630: client denied by server configuration: /home/blah/htdocs/images/file.svg

ฉันย้ายไฟล์ไปยังรูทของเว็บรูทผ่านการทดสอบแบบตาบอดและพบว่าฉันสามารถเข้าถึงได้ที่https://example.com/file.svg .. ดังนั้นไฟล์จึงล้มเหลวในโฟลเดอร์ 'images' เท่านั้น นี่ทำให้ฉันเป็นไฟล์. htaccess ในโฟลเดอร์รูปภาพที่ฉันไม่เคยรู้มาก่อน

ปรากฎว่า Zen Cart 1.5 มาพร้อมกับไฟล์ images / .htaccess ที่มี:

# deny *everything*
 <FilesMatch ".*">
   <IfModule mod_authz_core.c>
     Require all denied
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Deny from all
   </IfModule>
 </FilesMatch>

 # but now allow just *certain* necessary files:
 <FilesMatch "(?i).*\.(jpe?g|gif|webp|png|swf)$" >
   <IfModule mod_authz_core.c>
     Require all granted
   </IfModule>
   <IfModule !mod_authz_core.c>
     Order Allow,Deny
     Allow from all
   </IfModule>
 </FilesMatch>

นี่เป็นเรื่องที่น่ารำคาญมากและฉันหวังว่านี่อาจจะเตือนผู้อื่นให้ตรวจสอบไฟล์. htaccess ในทุกระดับของระบบไฟล์ที่นำไปสู่ไฟล์ที่คุณมีปัญหาในการเข้าถึงในกรณีที่มีการหลอกลวงแบบทอมเกิดขึ้น


0

ฉันแก้ไขอันนี้จริงโดยการเพิ่มการเข้าถึงไดเรกทอรีไปยัง: 80 รายการ

 <Directory "c:/whatever-directory-you-use/">
    AllowOverride All
    Require all granted
</Directory>

ก่อนที่ทุกคนจะได้รับ 'ความปลอดภัย' กับฉันภายใต้สถานการณ์เฉพาะของฉันนี่ไม่ใช่ปัญหาด้านความปลอดภัย

หากคุณกำลังใช้ทรัพยากรระยะไกลฉันขอแนะนำให้ตรวจสอบให้แน่ใจว่าคำขอ CURL ของคุณผ่าน HTTPS / TLS รายการไดเรกทอรีนี้จะไปที่พอร์ต 443


0

"บั๊ก" นี้เป็นพฤติกรรมปกติใหม่ของ Apache 2.4 ในกรณีของฉันฉันมีกฎเฉพาะเจาะจงมากที่จะปฏิเสธการเข้าถึงโฟลเดอร์หรือไฟล์ใด ๆ ที่มีชื่อขึ้นต้นด้วย "." ดังนั้นฉันจึงต้องตั้งข้อยกเว้นสำหรับโฟลเดอร์สาธารณะที่ต้องการชื่อแปลก ๆ

สำหรับบันทึกกฎการเขียนซ้ำโดยเฉพาะของฉันคือ:

RewriteRule "(?!\.trusted)(^|/)\." - [F]

กฎนี้ [F] obits ทุกอย่างที่ขึ้นต้นด้วย "." แต่.trustedต้องขอบคุณความมหัศจรรย์ของ regex "?!" การปฏิเสธ


0

เนื่องจากเธรดนี้เป็นสิ่งแรกที่ปรากฏขึ้นเมื่อค้นหาข้อผิดพลาดที่กล่าวถึงฉันต้องการเพิ่มสาเหตุอื่นที่เป็นไปได้สำหรับข้อผิดพลาดนี้: คุณอาจมีสถานะmod_evasiveใช้งานและลูกค้าที่เห็นข้อผิดพลาดนี้ข้ามขีด จำกัด ที่กำหนดไว้ในmod_evasive.conf

นี่เป็นสาเหตุที่ควรตรวจสอบหากคุณได้รับข้อผิดพลาดนี้ทันทีสำหรับลูกค้าที่ไม่มีปัญหามาก่อนและไม่มีอะไรเปลี่ยนแปลง

(หากmod_evasiveเป็นสาเหตุแล้วข้อผิดพลาดจะหายไปเองหากไคลเอ็นต์หยุดพยายามเข้าถึงไซต์ชั่วคราว แต่อาจเป็นสัญญาณว่าคุณได้กำหนดค่าขีด จำกัด ที่แน่นเกินไป)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.