จะปลอดภัยหรือไม่ที่จะใช้ sslverify => จริงสำหรับด้วย wp_remote_get / wp_remote_post


18

ฉันใช้อาร์กิวเมนต์นี้เพื่อป้องกันข้อผิดพลาดด้วยwp_remote_getและwp_remote_post

array(
    'sslverify' => false
)

เพื่อเหตุผลด้านความปลอดภัยฉันต้องการตั้งค่าเป็นtrue(หรือลบออกเนื่องจากค่าเริ่มต้นเป็นจริง)

ฉันควรคาดหวังว่าจะมีปัญหาใด ๆ

คำตอบ:


23

TL; DR: ใช่ลบการตั้งค่านั้นของ WordPress 3.7 หรือใหม่กว่า

ในอดีตผู้คนจำนวนมากเพิ่มพารามิเตอร์ sslverify = false โดยเฉพาะเนื่องจากการติดตั้ง PHP ไม่สามารถตรวจสอบใบรับรองได้อย่างถูกต้อง

โดยทั่วไปนี่เป็นเพราะการติดตั้ง PHP ไม่ได้รับการอัพเดตด้วยสำเนา CA Root Certificates ล่าสุด ใบรับรองรูตจะเปลี่ยนบ่อย ๆ และโดยปกติคุณจะไม่สังเกตเห็นการเปลี่ยนแปลงนี้เพราะมันเกิดขึ้นในการอัพเดทเบราว์เซอร์ปกติ เมื่อคุณมี PHP ที่ทำหน้าที่เหมือนเบราว์เซอร์ในการเรียก URL URL ก็จำเป็นต้องมีการปรับปรุงใบรับรองรูทเหล่านั้นด้วย และโฮสต์ส่วนใหญ่จะไม่อัปเดต PHP หรืออัปเดตส่วนใดส่วนหนึ่งของมัน (เช่นไฟล์ใบรับรอง)

เมื่อ WordPress ใช้การอัพเดทอัตโนมัติในเวอร์ชัน 3.7 จะต้องพิจารณาว่าจำเป็นต้องอัพเกรด WordPress.org APIs เพื่อต้องการการสื่อสารที่ปลอดภัย ในเวลานี้ WordPress เริ่มรวมสำเนาของไฟล์ CA Root Certificates นั้นมาจาก Mozilla ตั้งแต่ WordPress 3.7 ดังนั้นฟังก์ชั่น WP_HTTP API จึงใช้ไฟล์นี้เพื่อทำการตรวจสอบใบรับรองและไม่ใช่เวอร์ชั่นเก่าหรือรุ่นที่ล้าสมัยใด ๆ ที่บรรจุด้วยการติดตั้ง PHP ของคุณ

ดังนั้นใช่ด้วย WordPress 3.7 หรือใหม่กว่าขอแนะนำให้ลบพารามิเตอร์ sslverify และอนุญาตให้ฟังก์ชัน http ทำการตรวจสอบใบรับรองที่ถูกต้อง เซิร์ฟเวอร์สมัยใหม่ใด ๆ ที่ใช้ SSL ที่มีรหัสที่เซ็นชื่อโดยหนึ่งใน CA ที่รู้จักจะได้รับการตรวจสอบอย่างถูกต้อง WP_HTTP ควรมีสำเนาของใบรับรองหลักล่าสุดและโครงการหลักจะอัปเดตไฟล์ใบรับรองนั้นใน WordPress พร้อมกับการปรับปรุงปกติ


ขอบคุณ Otto ฉันคิดว่ามันช่วยได้มาก ฉันจะตรวจสอบเงื่อนไขในปลั๊กอินของฉัน
Xaver

9

มีสาเหตุหลายประการที่ทำให้การตรวจสอบ SSL ล้มเหลว เริ่มต้นจากการเปลี่ยนเส้นทางมากเกินไปไปยัง.iniไฟล์ / การตั้งค่าที่ไม่ถูกต้องหรือเพียงแค่ไม่มีใบรับรองหรือโดเมนย่อย ในกรณีใด ๆ คุณจะต้องค้นหาเหตุผลที่ว่าและแก้ไขได้ นอกจากนี้ไม่มีทางรอบ

แต่เพื่อหลีกเลี่ยงปัญหานั้นชั่วคราว (สมมติว่าคุณต้องพัฒนาโค้ดของคุณเพิ่มเติมและแก้ไขข้อผิดพลาด SSL ในภายหลัง) คุณสามารถใช้ตัวกรอง:

add_filter( 'https_ssl_verify', '__return_false' );

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

add_filter( 'http_request_args', function( $params, $url )
{
    // find out if this is the request you are targeting and if not: abort
    if ( 'foo' !== $params['foo'] )
         return $params;

    add_filter( 'https_ssl_verify', '__return_false' );

    return $params;
}, 10, 2 );

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

หลักการง่ายๆ:

ไม่เคยดำเนินการคำขอไม่ปลอดภัยจนกว่าผู้ใช้ของคุณได้ตกลงที่จะทำเช่นนั้นและรู้ถึงความเสี่ยง


1
ขอบคุณฉันกำลังค้นหาปัญหาเกี่ยวกับสภาพแวดล้อมท้องถิ่นของฉันในตอนนี้
Xaver

4

WordPress สามารถพึ่งพาซอฟต์แวร์เซิร์ฟเวอร์พื้นฐาน (โดยทั่วไปคือ cURL) เพื่อดำเนินการตามคำขอเครือข่าย สั้นเพราะมันเป็นสิ่งที่ซอฟต์แวร์ที่ดีและมีไว้สำหรับ

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

ดังนั้น:

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