คำแนะนำด้านความปลอดภัยในการติดตั้ง
From LimeSurvey Manual
ทั่วไป
โปรดทราบว่าเราให้ความสำคัญกับปัญหาด้านความปลอดภัยเป็นอย่างยิ่งและตอบสนองอย่างรวดเร็ว ดังนั้น หากคุณทราบถึงปัญหาด้านความปลอดภัยใน LimeSurvey โปรดแจ้งให้เราทราบโดยเปิดรายงานข้อบกพร่องใน ระบบติดตามข้อบกพร่อง ของเรา (โปรดระบุระดับความรุนแรงหรือหมวดหมู่ของข้อบกพร่องเป็น 'security')
สำหรับรายละเอียดเพิ่มเติม โปรดดู นโยบายความปลอดภัย ของเราเกี่ยวกับการรายงานปัญหาด้านความปลอดภัย/ช่องโหว่
การจำกัดการเข้าถึงของเว็บเซิร์ฟเวอร์
หากคุณใช้ Apache LimeSurvey มีไฟล์ htaccess หลายไฟล์สำหรับการจำกัดการเข้าถึง โปรดตรวจสอบว่าคุณอนุญาตให้ใช้ไฟล์ htaccess ที่มาพร้อมกันด้วย AllowOverride
หากใช้เว็บเซิร์ฟเวอร์อื่น หรือหากคุณต้องการใช้ AllowOverride None คุณต้อง:
- (ไม่บังคับ) ปิดการเข้าถึงไฟล์ทั้งหมดใน application, protected, framework และ themes/*/views
- ปิดการเข้าถึงไฟล์ที่ผู้ใช้อัปโหลดใน /upload/surveys/.*/fu_[a-z0-9]
- (ไม่บังคับ) ปิดการเข้าถึงไฟล์ที่สามารถรันได้ในไดเรกทอรีอัปโหลด
คุณสามารถดูตัวอย่างสำหรับ nginx ได้ใน General Faq ของเรา
สิทธิ์ของไฟล์บน Linux
หากคุณใช้เซิร์ฟเวอร์ Linux จำเป็นต้องกำหนดสิทธิ์ของไฟล์ให้เหมาะสมเพื่อรักษาความปลอดภัยของการติดตั้ง LimeSurvey ของคุณ
ข้อเท็จจริงพื้นฐานเกี่ยวกับสิทธิ์ของไฟล์บน Linux/*nix
ระบบปฏิบัติการ Linux/*nix รองรับผู้ใช้หลายคน ซึ่งหมายความว่านอกจากบัญชีส่วนตัวของคุณแล้ว อาจมีบัญชีผู้ใช้อื่นอยู่ในระบบ และคุณควรระมัดระวังในการให้สิทธิ์แก่ผู้ใช้อื่น
โปรดจำไว้ว่าบัญชี 'root' จะได้รับสิทธิ์เข้าถึงไฟล์ของคุณเสมอ (ไม่ว่าคุณจะกำหนดสิทธิ์ของไฟล์อย่างไรก็ตาม) เนื่องจากเป็นผู้ใช้ระดับผู้ดูแลระบบสูงสุด
เว็บเซิร์ฟเวอร์ (ที่รัน LimeSurvey) ทำงานภายใต้ตัวตน (ผู้ใช้) หนึ่งเช่นกัน บน Linux โดยทั่วไปจะเป็นผู้ใช้ 'www', 'www-data' (บน Debian/Ubuntu), 'apache' หรือ 'nobody' อย่างไรก็ตาม ผู้ให้บริการโฮสติ้งบางรายใช้ระบบ (เช่น suexec) ที่ทำให้สามารถรันสคริปต์ LimeSurvey ด้วยผู้ใช้ส่วนตัวของคุณได้ แน่นอนว่าผู้ใช้เว็บเซิร์ฟเวอร์ต้องมีสิทธิ์อ่านไฟล์ LimeSurvey แต่ไดเรกทอรีย่อยของ LimeSurvey เพียงส่วนน้อยเท่านั้นที่ผู้ใช้เว็บเซิร์ฟเวอร์ต้องเขียนได้
การกำหนดสิทธิ์ของไฟล์บนระบบ Linux ที่คุณดูแลเอง
หากคุณดูแลการกำหนดค่าเว็บเซิร์ฟเวอร์และระบบปฏิบัติการด้วยตนเอง (คุณเป็นเจ้าของเซิร์ฟเวอร์จริง หรือเช่าเซิร์ฟเวอร์เสมือนที่คุณมีสิทธิ์ root) คุณอาจพิจารณาคำแนะนำด้านล่างนี้
ก่อนอื่น คุณสามารถกำหนดเจ้าของและกลุ่มของไฟล์ LimeSurvey เพื่อให้การตั้งค่าสิทธิ์ของไฟล์ง่ายขึ้น กลยุทธ์ที่เป็นไปได้คือกำหนดเจ้าของไฟล์ LimeSurvey เป็นชื่อผู้ใช้ส่วนตัวของคุณ และกำหนดกลุ่มของไฟล์ LimeSurvey เป็นกลุ่มของเว็บเซิร์ฟเวอร์ โดยปกติกลุ่มของเว็บเซิร์ฟเวอร์นี้จะมีเพียงบัญชีของเว็บเซิร์ฟเวอร์ (และอาจมีบัญชีเว็บมาสเตอร์อื่นอีกหนึ่งบัญชี) ตัวอย่างเช่น หากชื่อผู้ใช้ของคุณคือ 'myaccount' และผู้ใช้เว็บเซิร์ฟเวอร์คือ 'apache' ในกลุ่ม 'apache' คุณสามารถใช้คำสั่งต่อไปนี้ผ่านทางเชลล์: $ chown -R myaccount:apache limesurvey/ จากนั้นจึงกำหนดสิทธิ์ของไฟล์และไดเรกทอรีย่อย
เพื่อให้สคริปต์ทำงานได้อย่างถูกต้อง จำเป็นต้องมีสิทธิ์เขียนในบางไดเรกทอรี:
- ไดเรกทอรี /limesurvey/application/config ต้องมีสิทธิ์ อ่านและเขียน เพื่อบันทึกการตั้งค่าการกำหนดค่าของแอปพลิเคชัน
- ไดเรกทอรี /limesurvey/tmp และไดเรกทอรีย่อยใช้สำหรับการนำเข้า/อัปโหลด และควรตั้งค่าเป็น อ่านและเขียน สำหรับเว็บเซิร์ฟเวอร์ของคุณ
- ไดเรกทอรี upload/ และไดเรกทอรีย่อยทั้งหมดต้องมีสิทธิ์ อ่านและเขียน เช่นกัน เพื่อให้สามารถอัปโหลดรูปภาพและไฟล์สื่อได้
- ไดเรกทอรีและไฟล์อื่นๆ ทั้งหมดสามารถตั้งค่าเป็น อ่านอย่างเดียว
การกำหนดสิทธิ์ของไฟล์บนเว็บเซิร์ฟเวอร์ที่เช่าโฮสติ้ง
เนื่องจากไม่มีขั้นตอนมาตรฐานในการรักษาความปลอดภัยของเว็บแอปพลิเคชันบนสภาพแวดล้อมโฮสติ้ง จึงค่อนข้างยาก เพราะสภาพแวดล้อมโฮสติ้งแต่ละแห่งแตกต่างกันในหลายด้าน
ในกรณีของเซิร์ฟเวอร์ที่มีผู้ดูแลให้ เซิร์ฟเวอร์ต้องมีสิทธิ์เขียนในบางไดเรกทอรีเพื่อให้สคริปต์ทำงานได้อย่างถูกต้อง:
- ไดเรกทอรี /limesurvey/tmp ใช้สำหรับการนำเข้า/อัปโหลด และควรตั้งค่าเป็น อ่านและเขียน สำหรับเว็บเซิร์ฟเวอร์ของคุณ
- ไดเรกทอรี upload/ และไดเรกทอรีย่อยทั้งหมดต้องมีสิทธิ์ อ่านและเขียน สำหรับเว็บเซิร์ฟเวอร์ของคุณเช่นกัน เพื่อให้สามารถอัปโหลดรูปภาพและไฟล์สื่อได้
- ไดเรกทอรีและไฟล์อื่นๆ ควรตั้งค่าเป็น อ่านอย่างเดียว
- ขึ้นอยู่กับการกำหนดค่าเว็บเซิร์ฟเวอร์ของคุณ คุณอาจต้องใช้ chmod เพื่อตั้งสิทธิ์ของโฟลเดอร์ที่เขียนได้เป็น 755 หรือ 777 เพื่อให้เว็บเซิร์ฟเวอร์เขียนได้ ลอง 755 ก่อน หากไม่ได้ผลจึง 'อัปเกรด' เป็น 777
- คุณยังสามารถลองลบสิทธิ์การอ่านของผู้ใช้อื่นสำหรับ config.php โดยตั้งสิทธิ์ของไฟล์นี้เป็น 750 - หากไม่ได้ผล ให้ 'อัปเกรด' เป็น 755
สิทธิ์ของไฟล์บน Windows
หากคุณใช้เซิร์ฟเวอร์ Windows คุณควรตรวจสอบให้แน่ใจว่าโฟลเดอร์ admin อนุญาตให้เจ้าของโพรเซสของเว็บเซิร์ฟเวอร์เขียนไฟล์ลงในไดเรกทอรีนี้ได้ ไฟล์ที่เหลือสามารถตั้งค่าเป็นอ่านอย่างเดียวและเรียกใช้งานได้
ปัญหาด้านความปลอดภัยอื่นๆ
ต่อไปนี้เป็นเพียงข้อแนะนำเท่านั้น โดยทั่วไป LimeSurvey มีความปลอดภัยสูงอยู่แล้วแม้ไม่มีมาตรการเพิ่มเติมเหล่านี้ อย่างไรก็ตาม หากคุณเก็บรวบรวมข้อมูลที่มีความละเอียดอ่อนอย่างยิ่ง การเพิ่มความปลอดภัยอีกเล็กน้อยอาจช่วยได้:
การใช้ SSL
โดยทั่วไปเราแนะนำให้ใช้ SSL สำหรับข้อมูลแบบสำรวจที่มีความละเอียดอ่อน คุณสามารถเปิดใช้ SSL ได้โดยกำหนดค่าเว็บเซิร์ฟเวอร์อย่างถูกต้องและใช้ใบรับรอง SSL หากคุณเปิดใช้ SSL แล้ว คุณควรบังคับใช้ SSL ตลอดเวลาจากการตั้งค่าโดยรวมของ LimeSurvey นอกจากนี้ คุณยังสามารถตั้งค่าให้ใช้คุกกี้แบบ 'secure' เท่านั้นได้ โดยแก้ไขตัวเลือกที่เกี่ยวข้องใน config.php
การเข้าถึงไฟล์ config.php
ไฟล์ /application/config/config.php มีชื่อผู้ใช้และรหัสผ่านสำหรับเซิร์ฟเวอร์ฐานข้อมูลของคุณ ซึ่งก่อให้เกิดปัญหาด้านความปลอดภัยบางประการ โดยเฉพาะอย่างยิ่งหากคุณใช้บัญชีเข้าสู่ระบบที่มีสิทธิ์ผู้ดูแลระบบระดับสูงต่อฐานข้อมูลของคุณ หากเกิดข้อผิดพลาดบางอย่างที่ทำให้เนื้อหาของไฟล์ PHP นี้ถูกส่งไปยังเบราว์เซอร์ของผู้ใช้ รหัสผ่านฐานข้อมูลและรายละเอียดอื่น ๆ ของคุณอาจถูกเปิดเผยได้ (อย่างไรก็ตาม สถานการณ์นี้มีโอกาสเกิดขึ้นน้อยมาก) วิธีที่ดีที่สุดในการลดความเสี่ยงคือการสร้างบัญชีเข้าสู่ระบบเฉพาะที่มีสิทธิ์เฉพาะกับฐานข้อมูล LimeSurvey ของคุณเท่านั้น
อีกวิธีหนึ่งในการรักษาความปลอดภัยของข้อมูลนี้คือการย้ายข้อมูลจากไฟล์ /application/config/config.php ไปไว้ในไดเรกทอรีที่ไม่สามารถเข้าถึงผ่านเว็บได้ เช่น สำหรับผู้ใช้ Apache คือไดเรกทอรีที่อยู่เหนือโฟลเดอร์ htdocs (หรือที่เรียกว่า public_html หรือ www) โดยหลักการคือคุณยังคงใช้ config.php แต่ในไฟล์นั้นจะมีเพียงหนึ่งบรรทัดซึ่งเรียกใช้ไฟล์ที่มีข้อมูลการกำหนดค่าจริง (เช่น <?php return include("/home/hostfolder/safedata/configreal.php"); ?>) ให้ลบข้อมูลการกำหนดค่าจริงทั้งหมดออกจาก /application/config/config.php แล้ววางลงในไฟล์อื่น (configreal.php) ที่ระบุไว้ในไฟล์ /application/config/config.php ไฟล์อื่นนี้ควรอยู่ในไดเรกทอรีที่ไม่สามารถเข้าถึงผ่านเว็บได้ จากนั้น /application/config/config.php จะไม่มีรหัสผ่านฐานข้อมูลหรือข้อมูลสำคัญอื่น ๆ เหลืออยู่ แต่จะมีเพียงชื่อไฟล์ที่ มี ข้อมูลฐานข้อมูลอยู่เท่านั้น
วิธีนี้ช่วยให้ไม่ต้องแก้ไขไฟล์อื่น ๆ ทั้งหมดที่เรียกใช้ /application/config/config.php เนื่องจาก config.php จะ 'เปลี่ยนเส้นทาง' ไปยังไฟล์การกำหนดค่าที่อยู่ในไดเรกทอรีที่ไม่สามารถเข้าถึงผ่านเว็บได้ ซึ่งมีข้อมูลการกำหนดค่าจริงทั้งหมด
นอกจากนี้ อย่าใช้ "admin" หรือ "administrator" เป็นผู้ใช้เริ่มต้น ให้ไปที่ฐานข้อมูล MySQL ของคุณ (หรือฐานข้อมูลที่คุณติดตั้ง LimeSurvey ไว้) แล้วเปลี่ยนชื่อบัญชีเริ่มต้น "admin" เป็นชื่ออื่นตามที่คุณต้องการ (เช่น "admin_xyz") ซึ่งจะทำให้การเดาชื่อบัญชีใหม่ของผู้ดูแลระบบยากขึ้นมาก โปรดจำไว้ว่านี่เป็นหนึ่งในสองตัวแปรที่ผู้บุกรุกใช้เพื่อเข้าถึงระบบ ส่วนรหัสผ่านของผู้ดูแลระบบเป็นอีกตัวแปรหนึ่ง ดังนั้นโปรดเลือกทั้งสองอย่างด้วยความระมัดระวังเป็นอย่างยิ่ง
นโยบายความปลอดภัยของเนื้อหา (Content Security Policy หรือ CSP)
ข้อจำกัดความรับผิดชอบ - CSP ที่แสดงไว้ที่นี่เป็นเพียงตัวอย่างเท่านั้น และไม่ได้มีไว้ให้นำไปใช้ตามนี้ทุกประการ ใช้เป็นจุดเริ่มต้นเท่านั้น และคุณจะต้องปรับให้เหมาะกับความต้องการของคุณและทดสอบอย่างละเอียด
<IfModule mod_headers.c>
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; base-uri 'none'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests" "expr=%{CONTENT_TYPE} =~ m#text\/(html|javascript)|application\/pdf|xml#i"
</IfModule>