การแอบอ้างเป็นผู้ใช้อื่นโดยทางโปรแกรมโดยไม่ทำให้ผู้ใช้ที่เข้าสู่ระบบในปัจจุบันออกจากระบบ


9

โมดูลควรเปลี่ยนค่าของโกลบอล$userเรียกใช้โค้ดของตนเองและเรียกคืนค่าดั้งเดิม$userโดยไม่ทำให้ผู้ใช้ปัจจุบันถูกล็อกเอาต์หากข้อผิดพลาดเกิดขึ้น?


มีปัญหาเก่าเปิดเกี่ยวกับเรื่องนี้ซึ่งเพิ่มฟังก์ชั่นที่สามารถจัดการกับสิ่งนี้ได้อย่างถูกต้องแม้ว่าจะถูกเรียกหลายครั้ง ดูdrupal.org/node/287292 โปรดตรวจสอบและทดสอบโปรแกรมแก้ไขที่นั่น
Berdir

1
ได้มีการจัดทำเอกสารชุมชนสร้างที่มีวิธีการปลอมตัวของผู้ใช้สำหรับ Drupal 6, 7 และ Drupal Drupal 8 อีก drupal.org: ปลอดภัยแอบอ้างผู้ใช้อื่น
iStryker

คำตอบ:


18

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

// Prevent session information from being saved while doing funky stuff.
$original_session_state = drupal_save_session();
drupal_save_session(FALSE);

// Force the current user to anonymous to ensure consistent permissions on
// funky stuff runs.
$original_user = $GLOBALS['user'];
$GLOBALS['user'] = drupal_anonymous_user(); // Or use user_load() for a non-anonymous user.

// Do funky stuff here...

// Restore the user.
$GLOBALS['user'] = $original_user;
drupal_save_session($original_session_state);

มูลค่า noting คุณสามารถใส่วัตถุผู้ใช้ปัจจุบันอยู่ที่ไหน (ใน$GLOBALSหรือเพียงแค่ในตัวแปรอื่นสำหรับการเก็บรักษา) และสวิทช์การใด ๆuser_load()ของผู้ใช้โดยโหลดพวกเขาด้วย ซึ่งช่วยให้คุณทำสิ่งที่น่ากลัวบางอย่างเช่นการปลอมแปลงเป็นผู้ใช้ที่ตั้งค่าด้วยสิทธิ์เฉพาะเพื่อดำเนินการตามกระบวนการเฉพาะ หลักการเดียวกัน
เกร็ก

โอกาสเกิดปัญหา 1 ข้อกับรหัสชิ้นนี้ คุณควรบันทึกเซสชันเก่าในตัวแปร $ old_session ตั้งค่าเซสชั่นการบันทึกเป็นเท็จจากนั้นในตอนท้าย drupal_save_session ($ old_session)
iStryker

การเข้าถึงและการจับภาพหน้าจอโดยใช้drupal.org/project/phantomjs_captureเป็นผู้ใช้รายอื่น มันเป็นไปได้ / หากิน? (DO ออกdrupal.org/node/2899252 )
kiranking
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.