IIS7: วิธีบล็อกการเข้าถึงด้วยไฟล์ web.config


14

ฉันรู้ว่า IIS7 อนุญาตให้ฉันมีการกำหนดค่าไดเรกทอรีต่อไฟล์ web.config xml ฉันมีไดเรกทอรีที่มีไฟล์การกำหนดค่าบางอย่างที่ไม่ต้องการให้สามารถเข้าถึงเว็บได้ ไฟล์ web.config ภายในเครื่องสำหรับห้ามการเข้าถึงเพื่ออ่านมันจะเป็นทางออกที่ดี

สิ่งที่ควรเป็นเนื้อหาของไฟล์ web.config เพื่อห้ามการเข้าถึงเว็บไฟล์?

แก้ไข:ฉันพยายามวางไฟล์ web.config พร้อมเนื้อหาเหล่านี้ในไฟล์:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
            <system.web>
                    <authorization>
                            <deny users="*" /> <!-- Denies all users -->
                    </authorization>
            </system.web>
</configuration>

แต่ฉันยังคงสามารถเข้าถึงไฟล์ภายในไดเรกทอรีได้โดยตรง มีอะไรผิดปกติกับมัน? ฉันจะดีบักว่าเกิดอะไรขึ้น

คำตอบ:


12

คุณกำลังใช้ system.web ใน IIS7 คุณควรใช้ system.webServer แทน สิ่งนี้จะบล็อกไฟล์ทุกประเภทไม่ใช่แค่ไฟล์ ASP.NET ตัวอย่างเช่นคุณสามารถป้องกันด้วยรหัสผ่าน jpg, gif, txt และไฟล์ทุกประเภท

มันจะมีลักษณะเช่นนี้:

  <system.webServer>
      <security>
          <authorization>
              <remove users="*" roles="" verbs="" />
              <add accessType="Allow" roles="Administrators" />
          </authorization>
      </security>
  </system.webServer>

และถ้าคุณต้องการตั้งค่าเพียง 1 ไฟล์:

 <location path="dontlook.jpg">
     <system.webServer>
         <security>
             <authorization>
                 <remove users="*" roles="" verbs="" />
                 <add accessType="Allow" roles="Administrators" />
             </authorization>
         </security>
     </system.webServer>
 </location>

ฉันพบคำตอบของฉันเองในอีกหนึ่งปีต่อมาและต้องการเพิ่มบันทึกย่อพิเศษ คุณต้องตรวจสอบให้แน่ใจว่าเปิดใช้งานฟอร์มหรือ windows auth ด้วยมิฉะนั้นเฉพาะกฎการลบจะมีประโยชน์ หากคุณเปิดใช้งาน Windows Authentication คุณจะได้รับแจ้งให้ป้อนข้อมูลรับรองของคุณ
Scott Forsyth - MVP

+1 ในที่สุด! ใช้เวลา 3 ชั่วโมงในการค้นหาสิ่งนี้! ขอบคุณ
hofnarwillie

5

ฉันคิดว่านี่สามารถแก้ปัญหาของคุณได้
วาง web.config นี้ในไดเรกทอรีที่มีไดเรกทอรีเป้าหมาย:

<configuration>
 <system.webServer>
  <security>
   <requestFiltering>
    <hiddenSegments>
     <add segment="target directory name"/>
    </hiddenSegments>
   </requestFiltering>
  </security>
 </system.webServer>
</configuration>

2
คุณสามารถตรวจสอบสิ่งนี้ก่อนที่จะส่งเป็นคำตอบ
James A Mohler

มันใช้งานได้สำหรับฉัน นอกจากนี้โปรดทราบว่าคุณสามารถใส่ชื่อไฟล์เป็นส่วน
Soenhay

4

คุณสามารถใช้โหนด Location บน Web.config นี่คือคำอธิบายโดยละเอียดเกี่ยวกับmsdn ; โดยสังเขป:

<location path="Subdirectory">
    <system.web>
        <authorization>
            <deny users="*"/> <!-- Denies all users -->
        </authorization>
    </system.web>
</location>
<location path="Public_Directory">
    <system.web>
        <authorization>
            <allow users="*"/> <!-- Allows all users -->
        </authorization>
    </system.web>
</location>

คุณยังสามารถใช้ wildcard เพื่อระบุว่าคุณควร (อนุญาต / ปฏิเสธ) ผู้ใช้ที่ไม่ระบุชื่อ


ไฟล์นี้จะบล็อกการเข้าถึงไดเรกทอรีปัจจุบันได้อย่างไร แต่อนุญาตให้ทำไดเรกทอรี "css" ไม่มีแท็ก <configuration> อยู่รอบ ๆ
neves

การอนุญาตของคุณอนุญาตเฉพาะผู้ใช้ที่ได้รับการรับรองความถูกต้อง หากคุณต้องการผู้ใช้ที่ไม่ผ่านการตรวจสอบสิทธิ์คุณควรอนุญาตให้ผู้ใช้ = "? เช่นกัน
Nissan Fan

0
  • * หมายถึงผู้ใช้ทุกคนที่ล็อกอิน
  • ? หมายถึงผู้ใช้ที่ไม่ระบุชื่อ

?คุณต้องใช้

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <system.web>
        <authorization>
            <deny users="?" /> 
        </authorization>
    </system.web>
</configuration>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.