แนวทางปฏิบัติด้านความปลอดภัยที่ดีที่สุดสำหรับปลั๊กอิน WordPress และธีมคืออะไร? [ปิด]


22

ตามที่แนะนำในคำถามนี้ฉันกำลังเพิ่มหัวข้อนี้เป็นคำถามใหม่สำหรับการอภิปรายชุมชน / การลงคะแนนเกี่ยวกับแนวทางปฏิบัติที่ดีที่สุดสำหรับความปลอดภัยของปลั๊กอิน / ธีม

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

หากคุณต้องการตรวจสอบชุดรูปแบบที่มีหน้าการตั้งค่าชุดรูปแบบที่ปลอดภัยและเข้ารหัสอย่างแน่นหนาให้ตรวจสอบชุดรูปแบบนี้:
http://wordpress.org/extend/themes/coraline


หากใครที่มีสิทธิ์ที่เหมาะสมจะไม่สนใจที่จะทำสิ่งนี้ให้เป็นชุมชนของวิกิหรือไม่?
Chip Bennett

เพื่อให้ได้คำถามในโหมดวิกิmod จำเป็นต้องติดแท็กคำถามอย่างเหมาะสมฉันได้ตั้งค่าสถานะเพื่อให้ความสนใจกับ mod มันเป็นเรื่องของเวลาในขณะนี้ .. :)
t31os

มีอะไรพิเศษเกี่ยวกับโครอลไลน์? Imo ยังคงมีวิธีที่จะได้รับฉันขอแนะนำให้เชื่อมโยง anons A insted: wordpress.stackexchange.com/questions/13539/…
ไกเซอร์

อาจไม่มีอะไรพิเศษเป็นพิเศษเกี่ยวกับ Coraline มันเป็นเพียงสิ่งเดียวที่เราในปัจจุบันชี้นักพัฒนาชุดรูปแบบไปเมื่อตรวจสอบชุดรูปแบบเพราะมันเป็นตัวอย่างที่จัสติน Tadlock ให้มาซึ่งเป็นผู้ตรวจสอบชุดรูปแบบเฉพาะด้านความปลอดภัยเบื้องต้น ฉันเสนอ Oenology เป็นตัวอย่างที่ดี แต่ฉันไม่ต้องการเจอว่าพยายามสร้างธีมของตัวเอง :)
Chip Bennett

คำตอบ:


13

ใช้ Nonces (เมื่อไม่ได้ใช้งาน API การตั้งค่า)

ปลั๊กอินและชุดรูปแบบควรให้การตรวจสอบ nonce หน้าการตั้งค่าอย่างชัดเจนถ้าไม่ได้ใช้การตั้งค่า API:


12

ฆ่าเชื้อโรค, ตรวจสอบและหลบหนีข้อมูล

ฆ่าเชื้อทุกสิ่งที่สามารถเข้าและออกจาก (!) ฐานข้อมูลได้ทั้งด้านหน้าและด้านหลัง!

ปลั๊กอินและชุดรูปแบบควรทำการตรวจสอบข้อมูลที่เหมาะสม:

  1. ตรวจสอบและฆ่าเชื้อข้อมูลที่ไม่น่าเชื่อถือทั้งหมดก่อนที่จะป้อนข้อมูลลงในฐานข้อมูล
  2. หนีข้อมูลที่ไม่น่าเชื่อถือทั้งหมดก่อนที่จะถูกส่งออกในการตั้งค่าเขตข้อมูลแบบฟอร์ม
  3. หลีกเลี่ยงข้อมูลที่ไม่น่าเชื่อถือทั้งหมดก่อนที่จะส่งออกในไฟล์เท็มเพลตธีม

ปลั๊กอินและชุดรูปแบบควรใช้esc_attr()สำหรับการป้อนข้อความและesc_html()หรือesc_textarea()สำหรับพื้นที่ข้อความ

นอกจากนี้ยังมีจาก WordPress API คือesc_url(), esc_url_raw(), และesc_js()wp_filter_kses()

ตัวอย่างที่ไม่ดี:

<?php $url = 'javascript:pwnd()'; ?>
<a href="<?php echo $url; ?>">anchor</a>

ตัวอย่างที่ดี:

<a href="<?php echo esc_url($url); ?>">anchor</a>

นี่คือวิดีโอยอดเยี่ยมของ Mark Jaquith ที่อธิบายการใช้งานฟังก์ชั่นการหลบหนี:


3
ฆ่าเชื้อระหว่างทางหนีออกนอกเส้นทาง .. :)
t31os

9

ใช้ $ _GET / $ _POST / $ _REQUEST อย่างระมัดระวังเท่านั้นและเมื่อ API ที่ดีกว่าไม่พร้อมใช้งาน

ปลั๊กอินและชุดรูปแบบควรใช้การตั้งค่า API เพื่อรับและบันทึกข้อมูลอินพุตแบบฟอร์มแทนการใช้$_POSTและ$_REQUESTข้อมูลโดยตรง


3
ปฏิบัติกับ $ _POST, $ _REQUEST และ $ _GET เสมอว่าไม่ปลอดภัย ฆ่าเชื้อโรคและค่าไวท์ลิสต์จากอาร์เรย์เหล่านั้นและใส่ลงในตัวแปรของคุณเอง อย่าทำให้มีค่าที่มาจากผู้ใช้และทำให้กลับเป็น $ _POST
goldenapples

2
ตรวจสอบทุกครั้งว่าคีย์ที่คุณต้องใช้มีการตั้งค่าในอาร์เรย์ที่เหมาะสม isset () คือเพื่อนของคุณ :)
mfields

9

ใช้ $wpdb->prepare

เมื่อสร้างคิวรีที่กำหนดเองผ่าน$wpdbวัตถุให้ใช้$wpdb->prepareเพื่อเติมตัวแทนที่มีค่าแทนการเขียนคิวรีที่มีข้อมูลผสมกับรหัส SQL เนื่องจากmysql_*ฟังก์ชันตระกูลได้สอนทุกคนอย่างผิด ๆ


$wpdb->prepareคือไม่ได้เช่นเดียวกับงบเตรียม
hakre

8

ระวังฟังก์ชั่น PHP ที่อาจใช้เรียกใช้โค้ดที่เป็นอันตราย

เป็นการอ่านที่ดีสำหรับทุกคนที่เขียน PHP: ฟังก์ชั่น PHP ที่สามารถใช้ประโยชน์ได้ใน StackOverflow

ใช้Theme Modification API

ชุดรูปแบบควรใช้set_theme_mod()และฟังก์ชั่นที่เกี่ยวข้องไม่ใช่ชุดรูปแบบชื่อที่คิดค้นขึ้นเอง
theme_mod API เป็นเลเยอร์พิเศษสำหรับ API การตั้งค่า มันรับประกันชื่อที่ไม่ซ้ำกันดันตัวเลือกทั้งหมดเป็นหนึ่งอาร์เรย์และ - จากประสบการณ์ของฉัน - ง่ายต่อการจัดการ นอกจากนี้ยังมีตัวกรองมาตรฐานสำหรับปลั๊กอิน - ซึ่งดีสำหรับการทำงานร่วมกัน

หลีกเลี่ยงการเปิดใช้งาน register_globals

register_globals = onไม่ต้องพึ่งพา ธีม Proซึ่งลูกค้าที่ผ่านมาของฉันซื้อไม่ตรงนี้ ฉันสามารถแฮ็คไซต์ใด ๆ ที่ใช้ชุดรูปแบบนี้ใน 5 นาที ...
ThimbThumb ก็ทำเช่นนี้ด้วย (และยังทำเช่นนั้น)

อย่าสร้างไฟล์ที่มีสิทธิ์การเข้าถึงแบบกว้างโดยไม่จำเป็น

อย่าสร้างไฟล์ด้วยสิทธิ์การเข้าถึงที่มากเกินไป

ใช้ SSL หากมี

ชี้แชร์ของคุณบน Twitter / Facebook /ลิงก์ใด ๆไปยัง HTTPS URI หากมี ความปลอดภัยของผู้อ่านเป็นสิ่งสำคัญเช่นกัน


2
คุณสามารถอธิบายรายละเอียดเกี่ยวกับset_theme_mod()การรวมเข้ากับการใช้งาน API การตั้งค่าได้อย่างถูกต้องหรือไม่?
Chip Bennett

@Chip Bennett ฉันได้เพิ่มข้อมูลลงในคำตอบของฉันแล้ว
fuxia

คุณสามารถแยกย่อยรายการขนาดเล็กนี้ด้วยคำตอบที่เฉพาะเจาะจงน้อยกว่านี้ได้หรือไม่? จัดการวิกิชุมชนได้ง่ายกว่าในกลุ่มที่เล็กกว่า TIA
Rarst

3
ชิป: ระบบ mod ของชุดรูปแบบทำงานร่วมกันไม่ได้กับ API การตั้งค่า ฉันจะเขียนโพสต์อธิบายวิธีการทำบางครั้งในไม่ช้า
อ็อตโต

7

บันทึกข้อมูลในอาร์เรย์เดียว

ปลั๊กอินและธีมควรบันทึกตัวเลือกในอาร์เรย์เดียวแทนที่จะสร้างหลายตัวเลือกสำหรับหน้าการตั้งค่า การใช้ API การตั้งค่าจะจัดการสิ่งนี้


6

ตรวจสอบความสามารถที่เหมาะสมเมื่อเพิ่มและแสดงผลหน้าการตั้งค่า

ปลั๊กอินควรใช้ความสามารถที่เหมาะสม(เช่นmanage_options) สำหรับความสามารถในการเพิ่มหน้าการตั้งค่า

ชุดรูปแบบควรใช้edit_theme_optionsเป็นความสามารถที่เหมาะสมเพื่อเพิ่มหน้าการตั้งค่า


1
หมายเหตุเล็ก ๆ แต่สำคัญ:คุณไม่สามารถใช้edit_theme_optionsกับ API การตั้งค่าได้ แต่การส่งตัวเลือกจะมีการกำหนดค่าตายตัวmanage_optionsเพื่อให้สามารถส่งการอัปเดตได้ ตั๋ว Trac ที่เกี่ยวข้องสามารถพบได้ที่นี่
t31os

จริง แต่ 1) ที่จะส่งผลกระทบต่อบรรณาธิการเท่านั้นไม่ใช่ผู้ดูแลระบบ และ 2) หวังว่าจะได้รับการแก้ไขในเร็ว ๆ นี้ผ่านทางตั๋ว Trac ที่เชื่อมโยง
Chip Bennett

มีความเป็นไปได้ที่จะมีบทบาทที่กำหนดเองหรือบทบาทปกติที่กำหนดให้edit_theme_optionsกับฉันฉันคิดว่ามันอาจจะมีประโยชน์ที่จะชี้ให้เห็นว่า API การตั้งค่าในสถานะปัจจุบันของมันสามารถใช้งานได้โดยบทบาทที่มีmanage_optionsความสามารถเท่านั้น
t31os

5

ใช้บทช่วยสอนและข้อมูลล่าสุด

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

ตัวอย่างของสิ่งที่ไม่ควรทำ :


1
ฉันเพิ่มข้อความที่เน้นเพียงเล็กน้อยเพื่อระบุว่าลิงก์เป็นตัวอย่างของสิ่งที่ไม่ควรทำเพราะมันง่ายต่อการอ่านข้อมูลและคลิกลิงก์โดยไม่ต้องอ่านย่อหน้าที่นำหน้าพวกเขา ทำให้คำตอบสวยขึ้นเล็กน้อยในขณะที่ฉันอยู่ที่นั่น ... ;)
t31os

2
สิ่งนี้อาจใช้คำอธิบายนิดหน่อยว่าแบบฝึกหัดตัวอย่างกำลังทำอะไรผิดและ / หรือแบบเก่า
Rarst

4

ใช้การตั้งค่า API

ปลั๊กอินและชุดรูปแบบควรใช้การตั้งค่า API ซึ่งใช้งานง่ายกว่าปลอดภัยกว่าและดูแลหน้าการตั้งค่าจำนวนมากอย่างหนัก:

สำหรับบทแนะนำที่ดีเกี่ยวกับการใช้ API การตั้งค่าดู:


ดูความคิดเห็นของฉันเกี่ยวกับคำตอบนี้เกี่ยวกับการตั้งค่า API และตัวเลือกชุดรูปแบบ
t31os

1

สำหรับช่องทำเครื่องหมายและตัวเลือกที่เลือกปลั๊กอินและชุดรูปแบบควรใช้checked()และselected()ฟังก์ชั่นสำหรับการส่งออกchecked="checked"และselected="selected"ตามลำดับ


ไม่ใช่เรื่องความปลอดภัยเว้นแต่ฉันจะทำบางสิ่ง ยังคงสะดวกและใช้งานได้ดี :)
Rarst

บางทีและอาจจะไม่ ฉันเห็นรหัสที่กำหนดเองจำนวนมากสำหรับการทำสิ่งเดียวกัน สปาเก็ตตี้รหัสมากขึ้น = มีโอกาสมากขึ้นที่จะแนะนำความเสี่ยงด้านความปลอดภัย :)
Chip Bennett

Bennet - จากการส่งจดหมายด้วย toscho เมื่อหลายวันก่อน - ฉันคิดว่าฉันสามารถพูดได้สำหรับเราทั้งคู่ - ฟังก์ชั่นที่ง่ายที่สุดสำหรับการอ่านและทำความเข้าใจที่ง่ายกว่าฟังก์ชั่นเหล่านั้น ฉันไม่ได้ลง - แต่ยังไม่ได้ upvotings นี้ Imo สิ่งนี้ไม่ควรเป็นส่วนหนึ่งของคอร์เนื่องจากไม่ได้เพิ่มคุณค่าใด ๆ
ไกเซอร์

2
ฉันอยากรู้สิ่งที่พวกคุณขึ้นมาด้วยการที่ง่ายกว่าหรือchecked( $theme_options['whatever_option'] ) checked( 'some_value' == $theme_options['whatever_option'] )ฉันไม่รู้ว่ามันสั้นกระชับกว่านี้ได้อย่างไร
Chip Bennett

1

ฟังก์ชั่นคำนำหน้าและชื่อตัวแปร

ปลั๊กอินควรนำหน้าตัวเลือกทั้งหมดฟังก์ชั่นที่กำหนดเองตัวแปรที่กำหนดเองและค่าคงที่ที่กำหนดเองด้วยปลั๊กอิน

ชุดรูปแบบควรนำหน้าตัวเลือกทั้งหมดฟังก์ชั่นที่กำหนดเองตัวแปรที่กำหนดเองและค่าคงที่ที่กำหนดเองด้วย theme-slug


ฉันจะขยายไปยังชื่อคลาสทั้งหมดรวมถึงชื่อของวัตถุที่กำหนดเองเช่น post_types และ taxonomies
mfields


0

เพิ่มหน้าการตั้งค่าให้กับส่วนที่เหมาะสมของเมนูผู้ดูแลระบบ

ปลั๊กอินควรใช้add_options_page()ฟังก์ชั่นเพื่อเพิ่มหน้าการตั้งค่าปลั๊กอินในSettingsเมนูแทนที่จะใช้add_menu_page()เพื่อเพิ่มเมนูระดับบนสุด

ธีมควรใช้add_theme_page()ฟังก์ชั่นเพื่อเพิ่มหน้าการตั้งค่าธีมลงในAppearanceเมนูแทนที่จะใช้add_menu_page()เพื่อเพิ่มเมนูระดับบนสุด

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