วิธีเปิดใช้งานวิธี HTTP ทั้งหมดใน Apache HTTP Server


16

ฉันจะเปิดใช้งานการจัดการวิธี HTTP ทั้งหมดตามที่กำหนดไว้ใน RFC 2616 บนเว็บเซิร์ฟเวอร์ Apache ได้อย่างไร สิ่งเหล่านี้จะเป็น:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

ฉันใช้ Apache HTTP Server เวอร์ชัน 2.2.22 (Ubuntu)
นี่คือ.htaccessไฟล์ของฉัน:

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>

นี่คือผลลัพธ์ที่ฉันได้รับจากการรัน Telnet - ไม่มีวิธี PUT:

Escape character is '^]'.
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign host.

ความคิดใด ๆ เกี่ยวกับเรื่องนี้?


Apache รุ่นไหนที่คุณใช้?

รุ่นเซิร์ฟเวอร์: Apache / 2.2.22 (Ubuntu)

1
คุณกำลัง จำกัด วิธีการใน/outputสถานที่, แต่คุณขอOPTIONSใน/ที่ตั้ง การ จำกัด วิธีใช้ไม่ได้กับสถานที่หลักเท่านั้นสำหรับสถานที่ที่ลึกกว่า
lanzz

คำตอบ:


7

Apache ใช้วิธี HTTP ที่เกี่ยวข้องทั้งหมดสำหรับเนื้อหาแบบสแตติก (ไฟล์จริงที่ให้บริการโดยตรงโดย Apache) สำหรับเนื้อหาแบบไดนามิก (สคริปต์ CGI mod_php, ฯลฯ ) Apache ไม่สนใจว่าวิธีการ HTTP คืออะไร (เว้นแต่ว่ามันจะถูก จำกัด ด้วย<Limit>คำสั่งอย่างชัดเจน) และส่งผ่านการร้องขอไปยังตัวจัดการที่เหมาะสมตามที่มันเป็น สคริปต์ของคุณต้องจัดการกับวิธีการเฉพาะตามที่ต้องการไม่ใช่ Apache แม้แต่วิธีการที่ไม่ได้มาตรฐานก็ถูกส่งผ่านไปยังตัวจัดการแบบไดนามิกโดยไม่มีปัญหา

ทดสอบกับASDFG / HTTP/1.1คำขอที่ไม่ถูกต้องซึ่งจัดการโดยmod_phpสคริปต์ ไม่มีการร้องเรียนจาก Apache ได้รับASDFGใน$_SERVER['REQUEST_METHOD']สคริปต์ตัวจัดการ


ขอบคุณสำหรับคำตอบ. ฉันแก้ไขไฟล์. htaccess ของฉันเพื่ออนุญาตวิธีการ http บางอย่าง ฉันตรวจสอบด้วย OPTIONS / HTTP / 1.0 ผ่าน telnet วิธี HTTP ที่อนุญาตไม่เคยเปลี่ยนแปลง ปัญหานี้ไม่ได้เกี่ยวกับ apache แต่อาจเป็นปัญหาสำหรับฉันที่จะเปิดใช้งานวิธี http ทั้งหมด

คุณควรโพสต์สิ่งที่คุณกำลังพยายามตอบสนองสิ่งที่คุณคาดหวังว่าจะเห็นสิ่งที่คุณเห็นแทนและวิธีจัดการกับคำขอเหล่านั้นทางฝั่งเซิร์ฟเวอร์ ไม่ควรหยุดOPTIONSคำขอใด ๆ เว้นแต่คุณจะห้ามอย่างชัดเจนด้วย<Limit OPTIONS> deny from all </Limit>การควบคุมการเข้าถึงที่คล้ายกัน
lanzz

2

ตามhttp://httpd.apache.org/docs/current/mod/core.htmlวิธีการเหล่านี้สามารถแก้ไขได้ในdirectoryและ .htaccessไฟล์การกำหนดค่าโดยใช้Limit method [method] ... > ... </Limit>คำสั่ง

โดยทั่วไปคุณต้องแสดงความคิดเห็นออกตัวเลือกเช่นตัวเลือกด้านล่างซึ่งใช้เพื่อบล็อกวิธีการ

<Limit POST PUT DELETE>
  Require valid-user
</Limit>


1

วิธีที่แน่ใจว่าจะแก้ไขปัญหานี้คือการเรียนรู้ว่าทำไม Apache ปฏิเสธการร้องขอในกรณีของคุณโดยเฉพาะ คุณสามารถเรียนรู้สิ่งนี้ได้จากบันทึกข้อผิดพลาด

ในกรณีของฉันtail -f /usr/local/apache/logs/error_logให้สิ่งนี้:

[Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576] 
[client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2). 
Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" 
required. [file "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [line 
"32"] [id "960032"] [msg "Method is not allowed by policy"] [severity 
"CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"] 
[uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"]

/usr/local/apache/conf/modsec-imh/01_base_rules.confกล่าวถึงกฎการรักษาความปลอดภัยและไฟล์มันมาจาก: การแก้ไขไฟล์นั้นแก้ไขปัญหาของฉันได้


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