ฉันจะป้องกันการระบุชื่อผู้ใช้ไม่ได้หรือไม่


33

ฉันสามารถป้องกันการระบุชื่อผู้ใช้ในไซต์ wordpress ของฉันได้หรือไม่ ฉันเห็นผู้ใช้ในขณะนี้โดยใช้เครื่องมือ WPScan


ฉันสร้างปลั๊กอินเพื่อเติมเต็มรูนี้พบได้ใน Wordpress Plugins ที่นี่: wordpress.org/plugins/stop-user-enumeration
2412827

คำตอบ:


26

ทางออกง่าย ๆ ที่ฉันใช้ใน.htaccess:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} author=\d
RewriteRule ^ - [L,R=403]

มันคล้ายกับคำตอบของ @ jptsetme แต่ใช้ได้แม้ในกรณีที่สตริงการสืบค้นเป็น/?dummy&author=5และรูปแบบการค้นหาRewriteRuleนั้นรวดเร็วมาก: คุณมักจะเห็นการจับภาพ([0-9]*)ในนิพจน์ปกติสำหรับสิ่งนี้ author=1bแต่มีไม่จำเป็นต้องเสียหน่วยความจำสำหรับการจับภาพเมื่อคุณไม่ได้ใช้การแสดงออกจับและตรงกับตัวอักษรตัวแรกก็พอเพราะคุณไม่ต้องการที่จะยอมรับ

อัปเดต 20.04.2017

ฉันเห็นคำขอที่ "แตก" มากขึ้นจากคนที่โง่เกินกว่าที่จะสแกนได้อย่างง่ายดาย URL ที่ร้องขอมีลักษณะดังนี้:

/?author={num:2}

ดังนั้นคุณสามารถขยายกฎด้านบนเป็น:

RewriteCond %{REQUEST_URI} !^/wp-admin [NC]
RewriteCond %{QUERY_STRING} ^author=\d+ [NC,OR]
RewriteCond %{QUERY_STRING} ^author=\{num 
RewriteRule ^ - [L,R=403]

13

คุณทำไม่ได้

เครื่องมือ WPScan เป็นเครื่องมืออัตโนมัติที่ใช้ประโยชน์จาก URL ที่เป็นมิตรของ WordPress เพื่อกำหนดชื่อผู้ใช้ มันจะวนซ้ำ 10 ID แรกที่เป็นไปได้สำหรับผู้เขียนและตรวจสอบLocationส่วนหัวในการตอบสนอง HTTP เพื่อค้นหาชื่อผู้ใช้

ใช้http://mysite.urlตัวอย่าง ...

WPScan http://mysite.url/?author=1จะตรวจสอบ หากเว็บไซต์ของคุณโดยใช้ Permalinks สวยก็จะกลับมา 301 เปลี่ยนเส้นทางที่มีส่วนหัวของLocation http://mysite.url/author/usernameหากไซต์ของคุณไม่ได้ใช้ลิงก์ถาวรสวยมันจะส่งคืนสถานะ 200 (OK) แทนดังนั้น WPScan จะตรวจสอบฟีดสำหรับสตริง "โพสต์ตามชื่อผู้ใช้" และดึงชื่อผู้ใช้ออก

คุณสามารถทำอะไรได้บ้าง

ก่อนอื่นเพียงเพราะมีคนคาดเดาชื่อผู้ใช้ของคุณไม่ได้หมายความว่าเว็บไซต์ของคุณไม่ปลอดภัย และไม่มีทางที่คุณจะสามารถป้องกันไม่ให้บางคนแยกวิเคราะห์ไซต์ของคุณในลักษณะดังกล่าว

อย่างไรก็ตาม ...

หากคุณเป็นกังวลเกี่ยวกับเรื่องนี้ฉันขอแนะนำให้ทำสองสิ่ง:

  1. ปิดลิงก์ถาวร สิ่งนี้จะบังคับให้ WPScan และเครื่องมือที่คล้ายกันแยกวิเคราะห์เนื้อหาในเว็บไซต์ของคุณสำหรับชื่อผู้ใช้แทนที่จะใช้ URL
  2. บังคับให้ผู้ใช้ตั้งชื่อเล่นอื่น ในกรณีที่ไม่มีชื่อผู้ใช้ใน URL เครื่องมือสแกนจะค้นหา "โพสต์ตามชื่อผู้ใช้" ในเนื้อหาฟีด / โพสต์แทน หากคุณไม่ได้ใส่ชื่อผู้ใช้ไว้ที่นั่นแสดงว่าไม่สามารถจับชื่อผู้ใช้ได้

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


4

ไม่ได้ทดสอบสิ่งนี้อย่างถี่ถ้วน แต่ฉันคิดว่ามันดีกว่าที่จะลบทรัพยากรพื้นฐานแทนที่จะพยายามสร้างกำแพงล้อมรอบในระดับเว็บเซิร์ฟเวอร์ ดังนั้นในแง่ WP ที่จะหยุดมันจากการประมวลผลตัวแปรแบบสอบถามที่เกี่ยวข้องกับผู้เขียน

if ( ! is_admin() ) {
    add_filter(
        'query_vars',
        function ( $public_query_vars ) {

            foreach ( array( 'author', 'author_name' ) as $var ) {
                $key = array_search( $var, $public_query_vars );
                if ( false !== $key ) {
                    unset( $public_query_vars[$key] );
                }
            }

            return $public_query_vars;
        }
    );
}

PS ทราบว่าสิ่งนี้จะฆ่าผู้เขียนที่เก็บถาวรทั้งหมดซึ่งอาจจะใช่หรือไม่ใช่ระดับความหวาดระแวงที่เหมาะสม :)


3

คุณสามารถใช้กฎ. htaccess เขียนซ้ำเพื่อป้องกันการเปิดเผยข้อมูลนี้ แต่คุณควรใช้ชื่อเล่นเพื่อหลีกเลี่ยงการเปิดเผยชื่อผู้ใช้ในเนื้อหาที่แยกวิเคราะห์ได้ตามที่ EAMann อธิบายไว้

บล็อกต่อไปนี้อธิบายวิธีการทำ แต่มีการพิมพ์ผิดในกฎการเขียนซ้ำ: http://www.question-defense.com/2012/03/20/block-wordpress-user-enumeration-secure-wordpress-against-hacking

กฎที่ถูกต้องควรลบสตริงข้อความค้นหาออกจาก URL ที่เขียนใหม่มิฉะนั้นคุณจะยังคงเปิดเผยชื่อผู้ใช้ ควรมีลักษณะเช่นนี้:

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yoursite.com/somepage/? [L,R=301]

ทำงานได้ดีสำหรับเรา


2

ฉันต้องการเพิ่มว่าคุณสามารถทำได้ใน nginx ด้วย ตรวจสอบ:
» การบล็อกการแจงนับผู้ใช้ WordPress บน nginx - www.edwidget.name

ตามบันทึกด้านข้างฉันต้องการป้องกันการระบุชื่อผู้ใช้บนไซต์ของฉันที่โฮสต์ด้วย WP Engine ซึ่ง จำกัด การเข้าถึงไฟล์กำหนดค่า nginx ระดับต่ำของผู้ใช้ อย่างไรก็ตามพวกเขามีส่วน "กฎการเปลี่ยนเส้นทาง" ในแผงควบคุมซึ่งช่วยให้คุณสามารถทำสิ่งนี้ได้ หลังจากนั้นสักครู่ฉันก็จัดการการตั้งค่าที่ดีที่สุด:

Redirect Name: // choose a description for the rewrite
Domain: // you *must* select a domain; "All Domains" will *not* work here!
Source: ^/$
Destination: /?

จากนั้นคุณต้องแสดงAdvanced Settingsพาเนล ...

Match args: author=([0-9]*)
Rewrite type: 301 Permanent

นอกจากนี้ชื่อผู้ใช้ของคุณปลอดภัย [r]!


0

ฉันได้บล็อกการระบุผู้ใช้อย่างสมบูรณ์จาก WPScan โดยการเพิ่มสิ่งต่อไปนี้ใน htaccess

# Stop wordpress username enumeration vulnerability
RewriteCond %{REQUEST_URI}  ^/$
RewriteCond %{QUERY_STRING} ^/?author=([0-9]*)
RewriteRule ^(.*)$ http://yourdomain.com [L,R=301]
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

ความคิดเห็นอย่างมืออาชีพของฉันในฐานะผู้ทดสอบการเจาะระบบสำหรับเอเจนซี่ที่ไม่ได้ทำหน้าที่ ... มันเป็นเสมอมูลค่าทำให้มันยากที่จะระบุข้อมูลเกี่ยวกับเว็บไซต์ของคุณ ไม่กี่คนที่คุณจะมีเว็บไซต์ที่สูงกว่า google แฮกเกอร์ตัวเล็กสคริปต์ เรากำลังพูดถึงการรักษาความปลอดภัยแบบเลเยอร์และในแต่ละเลเยอร์คุณจะเพิ่มเวลาและความซับซ้อนในการเจาะระบบ แต่ละชั้นจะเพิ่มชุดทักษะที่ต้องการของแฮ็กเกอร์ มีแอพพลิเคชั่นไฟร์วอลล์ที่ดีจริง ๆ อยู่เล็กน้อยใน WP มองหาผู้ที่สามารถปิดกั้นที่อยู่ IP ที่มีการพยายามลงชื่อเข้าใช้ของผู้ใช้ซ้ำหรือ 404 แนวคิดสำหรับไฟร์วอลล์ของคุณคือการบล็อก IP โดยอัตโนมัติที่สแกนเว็บไซต์ของคุณเพื่อหาหน้าเว็บที่ไม่มีอยู่หรือพยายามลงชื่อเข้าใช้เว็บไซต์ของคุณซ้ำ ๆ คุณสมบัติที่ดียังรวมถึงความสามารถในการบล็อก XSS และ SQL Injection พิจารณาใช้ All In One Security WP จาก Tips and Tricks HQ, Peter, Ruhul, Ivy


0

แทนการใช้.htaccessเส้นทางอีกทางเลือกหนึ่งคือการเพิ่มรหัสต่อไปนี้รูปแบบของเด็กของคุณfunctions.php:

# Redirect author page to homepage
add_action( 'template_redirect', 'wpse_46469_author_page' );

function wpse_46469_author_page() {
    # If the author archive page is being accessed, redirect to homepage
    if ( is_author() ) {
        wp_safe_redirect( get_home_url(), 301 );
        exit;
    }
}

นอกจากนี้คุณสามารถเปลี่ยนลิงค์ผู้เขียนเริ่มต้นที่เพิ่มไปยังชื่อผู้ใช้ของแต่ละหน้าเป็นอย่างอื่น (เช่นหน้าแรก) โดยใช้สิ่งต่อไปนี้:

# Replace author URL with the homepage
add_filter( 'author_link', 'wpse_46469_author_link' ); 

function wpse_46469_author_link() {
    # Return homepage URL
    return home_url();
}

0

ฉันรู้ว่านี่เป็นโพสต์เก่า แต่สำหรับการอ้างอิงในอนาคตฉันต้องการเพิ่มโซลูชันของฉันเช่นกัน นี่เป็นเพียงตัวอย่างข้อมูลที่จะนำไปใช้ในfunctions.phpธีมของคุณ มันจะทิ้งทุกอย่างไว้ในที่ทำงานและแม้กระทั่งผู้เขียนเก็บถาวร แต่มันก็ฆ่าการร้องขอการแจงนับไม่ดี

if (!is_admin()) {
    if( preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ) {
        add_filter( 'query_vars', 'iside_remove_author_from_query_vars' );
    }
    add_filter('redirect_canonical', 'iside_remove_author_from_redirects', 10, 2);
}
function iside_remove_author_from_redirects($redirect, $request) {
    if( !is_admin() && preg_match('/author=([0-9]*)/i', $_SERVER['QUERY_STRING']) ) {
        add_filter( 'query_vars', 'iside_remove_author_from_query_vars' );
    }
    return $redirect;
}
function iside_remove_author_from_query_vars( $query_vars ) {
    if( !is_admin() ) {
        foreach( array( 'author', 'author_name' ) as $var ) {
            $key = array_search( $var, $query_vars );
            if ( false !== $key ) {
                unset( $query_vars[$key] );
            }
        }
    }
    return $query_vars;
}

มันทำอะไร:

  • มันสแกน URL เพื่อหาสิ่งที่ชอบ: author=1
  • เมื่อพบว่ามันจะลบตัวแปรผู้เขียนจากแบบสอบถาม vars ดังนั้นมันจะไม่ถูกสอบถาม

หากคุณใช้ลิงก์ถาวรสิ่งนี้จะทำให้คลังข้อมูลของผู้แต่งเรียบง่าย นอกจากนี้ถ้า URL จะเป็นสิ่งที่ชอบเพียงแค่นี้จะแสดงหน้าสำหรับ/dummy?author=1/dummy

ขอบคุณคำตอบของ Rarst สำหรับคำถามนี้และhttps://perishablepress.com/stop-user-enumeration-wordpress/


0

ฉันต้องการโพสต์วิสัยทัศน์ของตัวเอง:

RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author= [NC]
RewriteRule (.*) $1? [L]

บรรทัดแรกตรวจพบเฉพาะโฮมเพจ ฉันจะอธิบายว่าทำไม คุณลักษณะ "การแจงนับผู้ใช้" นี้ใช้งานได้ในหน้าแรกเท่านั้นดังนั้นไม่จำเป็นต้องเขียน URL ทั้งหมดอีก

ต่อไปเราจะauthor=ค้นหาสตริงข้อความค้นหา มันชัดเจน

สุดท้ายเราเพิ่งแสดงหน้าต้นฉบับโดยไม่มีบล็อกการเปลี่ยนเส้นทาง (301, 302) หรือการห้าม (403) มันควรจะทำตัวเหมือนหน้ากับพารามิเตอร์ไร้ประโยชน์อื่น ๆ หรือไม่

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