ฉันสามารถป้องกันการระบุชื่อผู้ใช้ในไซต์ wordpress ของฉันได้หรือไม่ ฉันเห็นผู้ใช้ในขณะนี้โดยใช้เครื่องมือ WPScan
ฉันสามารถป้องกันการระบุชื่อผู้ใช้ในไซต์ wordpress ของฉันได้หรือไม่ ฉันเห็นผู้ใช้ในขณะนี้โดยใช้เครื่องมือ WPScan
คำตอบ:
ทางออกง่าย ๆ ที่ฉันใช้ใน.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]
คุณทำไม่ได้
เครื่องมือ 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 จะตรวจสอบฟีดสำหรับสตริง "โพสต์ตามชื่อผู้ใช้" และดึงชื่อผู้ใช้ออก
ก่อนอื่นเพียงเพราะมีคนคาดเดาชื่อผู้ใช้ของคุณไม่ได้หมายความว่าเว็บไซต์ของคุณไม่ปลอดภัย และไม่มีทางที่คุณจะสามารถป้องกันไม่ให้บางคนแยกวิเคราะห์ไซต์ของคุณในลักษณะดังกล่าว
อย่างไรก็ตาม ...
หากคุณเป็นกังวลเกี่ยวกับเรื่องนี้ฉันขอแนะนำให้ทำสองสิ่ง:
อีกทางเลือกหนึ่งคือการเปลี่ยนผู้เขียนลิงก์ถาวรของคุณ มีหลายวิธีที่คุณสามารถทำเช่นนี้และคุณอาจจะสามารถหาไม่กี่ในเว็บไซต์นี้ได้เป็นอย่างดี
ไม่ได้ทดสอบสิ่งนี้อย่างถี่ถ้วน แต่ฉันคิดว่ามันดีกว่าที่จะลบทรัพยากรพื้นฐานแทนที่จะพยายามสร้างกำแพงล้อมรอบในระดับเว็บเซิร์ฟเวอร์ ดังนั้นในแง่ 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 ทราบว่าสิ่งนี้จะฆ่าผู้เขียนที่เก็บถาวรทั้งหมดซึ่งอาจจะใช่หรือไม่ใช่ระดับความหวาดระแวงที่เหมาะสม :)
คุณสามารถใช้กฎ. 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]
ทำงานได้ดีสำหรับเรา
ฉันต้องการเพิ่มว่าคุณสามารถทำได้ใน 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]!
ฉันได้บล็อกการระบุผู้ใช้อย่างสมบูรณ์จาก 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
แทนการใช้.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();
}
ฉันรู้ว่านี่เป็นโพสต์เก่า แต่สำหรับการอ้างอิงในอนาคตฉันต้องการเพิ่มโซลูชันของฉันเช่นกัน นี่เป็นเพียงตัวอย่างข้อมูลที่จะนำไปใช้ใน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;
}
มันทำอะไร:
author=1
หากคุณใช้ลิงก์ถาวรสิ่งนี้จะทำให้คลังข้อมูลของผู้แต่งเรียบง่าย นอกจากนี้ถ้า URL จะเป็นสิ่งที่ชอบเพียงแค่นี้จะแสดงหน้าสำหรับ/dummy?author=1
/dummy
ขอบคุณคำตอบของ Rarst สำหรับคำถามนี้และhttps://perishablepress.com/stop-user-enumeration-wordpress/
ฉันต้องการโพสต์วิสัยทัศน์ของตัวเอง:
RewriteCond %{REQUEST_URI} ^/$
RewriteCond %{QUERY_STRING} ^author= [NC]
RewriteRule (.*) $1? [L]
บรรทัดแรกตรวจพบเฉพาะโฮมเพจ ฉันจะอธิบายว่าทำไม คุณลักษณะ "การแจงนับผู้ใช้" นี้ใช้งานได้ในหน้าแรกเท่านั้นดังนั้นไม่จำเป็นต้องเขียน URL ทั้งหมดอีก
ต่อไปเราจะauthor=
ค้นหาสตริงข้อความค้นหา มันชัดเจน
สุดท้ายเราเพิ่งแสดงหน้าต้นฉบับโดยไม่มีบล็อกการเปลี่ยนเส้นทาง (301, 302) หรือการห้าม (403) มันควรจะทำตัวเหมือนหน้ากับพารามิเตอร์ไร้ประโยชน์อื่น ๆ หรือไม่