คำถามติดแท็ก permissions

10
“ ผู้ใช้ไม่ควรตัดสินใจว่าเป็นผู้ดูแลหรือไม่ ควรมีสิทธิ์หรือระบบรักษาความปลอดภัย”
ตัวอย่างที่ใช้ในคำถามผ่านข้อมูลขั้นต่ำเปลือยไปยังฟังก์ชั่นสัมผัสกับวิธีที่ดีที่สุดเพื่อตรวจสอบว่าผู้ใช้เป็นผู้ดูแลหรือไม่ หนึ่งคำตอบทั่วไปคือ: user.isAdmin() สิ่งนี้กระตุ้นให้เกิดความคิดเห็นซึ่งซ้ำหลายครั้งและได้รับการโหวตหลายครั้ง: ผู้ใช้ไม่ควรตัดสินใจว่าเป็นผู้ดูแลระบบหรือไม่ สิทธิพิเศษหรือระบบความปลอดภัยควร สิ่งที่อยู่คู่กับชั้นเรียนแน่นไม่ได้หมายความว่าเป็นความคิดที่ดีที่จะทำให้มันเป็นส่วนหนึ่งของชั้นเรียนนั้น ฉันตอบ ผู้ใช้ไม่ได้ตัดสินใจอะไร วัตถุผู้ใช้ / ตารางเก็บข้อมูลเกี่ยวกับผู้ใช้แต่ละคน ผู้ใช้จริงไม่ได้เปลี่ยนทุกอย่างเกี่ยวกับตัวเอง แต่นี่ไม่ได้ผล เห็นได้ชัดว่ามีความแตกต่างพื้นฐานของมุมมองซึ่งทำให้การสื่อสารเป็นเรื่องยาก มีคนอธิบายให้ฉันฟังได้ไหมว่าทำไม user.isAdmin () ไม่ดีและวาดภาพร่างสั้น ๆ ของสิ่งที่ดูเหมือน "ถูกต้อง" จริงๆฉันไม่เห็นข้อดีของการแยกการรักษาความปลอดภัยจากระบบที่ปกป้อง ข้อความความปลอดภัยใด ๆ จะกล่าวว่าความปลอดภัยต้องได้รับการออกแบบเข้าสู่ระบบตั้งแต่เริ่มต้นและพิจารณาในทุกขั้นตอนของการพัฒนาการปรับใช้การบำรุงรักษาและแม้กระทั่งจุดสิ้นสุดของชีวิต ไม่ใช่สิ่งที่สามารถยึดติดกับด้านข้างได้ แต่ 17 คะแนนขึ้นไปจนถึงความคิดเห็นนี้บอกว่าฉันไม่มีอะไรสำคัญ

2
การควบคุมการเข้าถึงตามบทบาทที่ได้รับอนุญาต
ฉันพยายามที่จะเข้าใจถึงการแลกเปลี่ยนระหว่างบทบาทและสิทธิ์ต่าง ๆ เมื่อพูดถึงการควบคุมการเข้าถึง (การอนุญาต) เริ่มจากสิ่งที่กำหนดไว้: ในระบบของเราการอนุญาตจะเป็นหน่วยการเข้าถึงที่ละเอียด (" แก้ไขทรัพยากร X ", " เข้าถึงหน้าแดชบอร์ด " ฯลฯ ) บทบาทจะเป็นคอลเลกชันของ 1+ สิทธิ์ ผู้ใช้สามารถมีบทบาท 1+ ความสัมพันธ์เหล่านี้ทั้งหมด (ผู้ใช้, บทบาท, การอนุญาต) จะถูกเก็บไว้ในฐานข้อมูลและสามารถเปลี่ยนแปลงได้ทันทีและตามความจำเป็น ความกังวลของฉัน: (1) "เลวร้าย" เกี่ยวกับการตรวจสอบบทบาทสำหรับการควบคุมการเข้าถึงอย่างไร จะได้ประโยชน์อะไรบ้างจากการตรวจสอบการอนุญาตแทน กล่าวอีกนัยหนึ่งอะไรคือความแตกต่างระหว่างตัวอย่างโค้ดด้านล่าง: if(SecurityUtils.hasRole(user)) { // Grant them access to a feature } // vs. if(SecurityUtils.hasPermission(user)) { // Grant them access to …

5
คำสำหรับการดำเนินการที่สามารถนำมาใช้หลายครั้งและไม่เคยเปลี่ยนสถานะเกินกว่าแอปพลิเคชันเริ่มต้นคืออะไร
ฉันพยายามจำคำหนึ่งฉันคิดว่ามันเกี่ยวข้องกับทฤษฎีการคำนวณหรือฐานข้อมูล คำพ้องความหมายที่ใกล้เคียงที่สุดคือatomicแต่นั่นไม่ใช่สิ่งที่แน่นอน โดยทั่วไปมันเป็นการคำนวณที่ควรให้ผลลัพธ์เหมือนกันแม้ว่าจะทำงานหลาย ๆ ครั้งในแถวหมายความว่ามันจะไม่สร้างผลข้างเคียงให้กับตัวเอง ฉันวิ่งข้ามคำนี้ในคำตอบ Stack Overflow เกี่ยวกับคำสั่ง chmod (หรือการดำเนินการอื่น ๆ ที่เกี่ยวข้องกับการอนุญาต) หวังว่าจะเพียงพอต่อไป การพูดถึงวิกิพีเดียไม่ได้ช่วยอะไรมาก

6
การประเมินโค้ดแบบไดนามิกใน Java - เคลฟเวอร์หรือเลอะเทอะ?
ฉันกำลังพยายามสร้างเฟรมเวิร์ก ACL ที่ยืดหยุ่นใน Java สำหรับแอปพลิเคชันของฉัน กรอบ ACL หลายคนที่ถูกสร้างขึ้นในรายการที่อนุญาตของกฎที่กฎอยู่ในรูปแบบของการใช้: การกระทำ: ทรัพยากร ตัวอย่างเช่น, "JOHN สามารถดูทรัพยากร FOOBAR-1" "MARY สามารถดูทรัพยากร FOOBAR-1" "MARY สามารถแก้ไขทรัพยากร FOOBAR-1" สิ่งนี้เป็นสิ่งที่น่าสนใจเนื่องจากกฎสามารถทำให้เป็นอนุกรม / คงอยู่กับฐานข้อมูลได้อย่างง่ายดาย แต่แอปพลิเคชันของฉันมีตรรกะทางธุรกิจที่ซับซ้อน ตัวอย่างเช่น, "ผู้ใช้ทุกคนในแผนก 1 ที่มีอาวุโสกว่า 5 ปีสามารถดูทรัพยากร FOOBAR-1 ไม่ได้รับอนุญาต" "ผู้ใช้ทุกคนในแผนก 2 หากวันที่หลังวันที่ 15/15/2016 สามารถดูทรัพยากร FOOBAR-2 ไม่ได้รับอนุญาต" เมื่อคิดเป็นครั้งแรกมันจะเป็นฝันร้ายที่จะสร้างโครงสร้างของฐานข้อมูลที่สามารถจัดการกับกฎที่ซับซ้อนเช่นนี้ ดังนั้นดูเหมือนว่าฉันจะต้อง "อบ" พวกเขาลงในใบสมัครที่รวบรวมการประเมินพวกเขาสำหรับผู้ใช้แต่ละคนและจากนั้นผลิตเจ้าของ: การกระทำ:กฎทรัพยากรเป็นผลมาจากการประเมินผล ฉันต้องการหลีกเลี่ยงการอบตรรกะในแอปพลิเคชันที่รวบรวม ดังนั้นฉันคิดของการเป็นตัวแทนของการปกครองในรูปแบบของคำกริยา : การกระทำ: ทรัพยากรที่สรุปคือการแสดงออกบูลที่กำหนดว่าผู้ใช้ที่ได้รับอนุญาต เพรดิเคตจะเป็นสตริงของนิพจน์ …

5
การตรวจสอบการอนุญาตของผู้ใช้จะเกิดขึ้นที่ใดและใน MVC และโดยใคร
ควรตรวจสอบการอนุญาตของผู้ใช้เกิดขึ้นในรุ่นหรือคอนโทรลเลอร์ และใครควรจัดการกับการตรวจสอบการอนุญาตวัตถุผู้ใช้หรือผู้ช่วยการจัดการบางอย่าง? มันควรจะเกิดขึ้นที่ไหน? การตรวจสอบในคอนโทรลเลอร์: class MyController { void performSomeAction() { if (user.hasRightPermissions()) { model.someAction(); } } ... การมีการตรวจสอบในคอนโทรลเลอร์ช่วยให้การดำเนินการเป็นแบบอย่างง่ายดังนั้นเราจึงสามารถเก็บตรรกะทั้งหมดไว้กับตัวควบคุมได้ ตรวจสอบในรูปแบบ: class MyModel { void someAction() { if (user.hasRightPermissions()) { ... } } ... โดยการใส่เช็คเข้าไปในโมเดลเราทำให้โมเดลนั้นมีความซับซ้อน แต่ก็ต้องแน่ใจว่าเราไม่อนุญาตให้ผู้ใช้ทำสิ่งที่พวกเขาไม่ควรจะอยู่ในคอนโทรลเลอร์ แล้วใครล่ะ เมื่อเราตัดสินในสถานที่แล้วใครควรทำการตรวจสอบ? ผู้ใช้งาน? Class User { bool hasPermissions(int permissionMask) { ... } ... แต่มันไม่ใช่ความรับผิดชอบของผู้ใช้ที่จะรู้ว่าเขาหรือเธอสามารถทำอะไรได้บ้างดังนั้นบางทีผู้ช่วยบางคน? Class UserManagement …
26 mvc  permissions 

2
การใช้ DDD: ผู้ใช้และการอนุญาต
ฉันกำลังทำงานกับแอปพลิเคชันขนาดเล็กที่พยายามเข้าใจหลักการของการออกแบบที่ขับเคลื่อนด้วยโดเมน หากประสบความสำเร็จนี่อาจเป็นโครงการนำร่องสำหรับโครงการขนาดใหญ่ ฉันกำลังพยายามติดตามหนังสือ "ใช้การออกแบบโดเมนขับเคลื่อนด้วย" (โดย Vaughn Vernon) และพยายามใช้ฟอรัมสนทนาที่คล้ายกันและเรียบง่าย ฉันได้ลองดูตัวอย่าง IDDD ของ GitHub ฉันมีปัญหาในการใช้ข้อมูลประจำตัวและการเข้าถึงกรณีของฉัน ให้ฉันให้ข้อมูลพื้นหลัง: ฉัน (หวังว่า) เข้าใจเหตุผลที่อยู่เบื้องหลังการแยกผู้ใช้และตรรกะการอนุญาต: มันเป็นโดเมนที่สนับสนุนและเป็นบริบทที่แตกต่างกัน ในโดเมนหลักไม่มีผู้ใช้เพียงแค่ผู้สร้างผู้ดูแล ฯลฯ สิ่งเหล่านี้ถูกสร้างขึ้นโดยการเข้าถึงบริบทผู้ใช้และการเข้าถึงโดยใช้บริการจากนั้นจึงแปลวัตถุผู้ใช้ที่ได้รับและผู้ดูแล การดำเนินการกับโดเมนจะถูกเรียกพร้อมกับบทบาทที่เกี่ยวข้องเป็นพารามิเตอร์: เช่น: ModeratePost( ..., moderator); วิธีการของวัตถุโดเมนตรวจสอบว่าอินสแตนซ์ของโมเดอเรเตอร์ที่กำหนดไม่ใช่โมฆะ (อินสแตนซ์ของโมเดอเรเตอร์จะเป็นโมฆะถ้าผู้ใช้ที่ถามจากบริบทผู้ใช้และบริบทไม่มีบทบาทผู้ดูแล) ในกรณีหนึ่งจะทำการตรวจสอบเพิ่มเติมก่อนที่จะแก้ไขโพสต์: if (forum.IsModeratedby(moderator)) คำถามของฉันคือ: ในกรณีหลังความกังวลด้านความปลอดภัยไม่ได้รวมกันอีกครั้งในโดเมนหลัก? ก่อนหน้านี้หนังสือระบุว่า "ใครสามารถโพสต์หัวข้อหรือภายใต้เงื่อนไขที่อนุญาตฟอรั่มเพียงแค่ต้องรู้ว่าผู้แต่งกำลังทำเช่นนั้นในตอนนี้" การนำไปใช้ตามบทบาทในหนังสือเล่มนี้ค่อนข้างตรงไปตรงมา: เมื่อ Moderator เป็นโดเมนหลักพยายามแปลง userId ปัจจุบันเป็น Moderator หรือเป็นผู้เขียนเมื่อต้องการ บริการจะตอบกลับด้วยอินสแตนซ์ที่เหมาะสมหรือเป็นโมฆะหากผู้ใช้ไม่มีบทบาทที่จำเป็น อย่างไรก็ตามฉันไม่สามารถเห็นได้ว่าฉันจะปรับให้เข้ากับรูปแบบการรักษาความปลอดภัยที่ซับซ้อนมากขึ้นได้อย่างไร โครงการปัจจุบันของเราที่ฉันกำลังดำเนินการอยู่นั้นมีรูปแบบที่ค่อนข้างซับซ้อนกับกลุ่ม ACL ฯลฯ แม้จะมีกฎที่ไม่ซับซ้อนมากเช่น: "โพสต์ควรแก้ไขโดยเจ้าของหรือบรรณาธิการเท่านั้น" …

2
วิธีการออกแบบการควบคุมการเข้าถึงตามบทบาท?
ฉันกำลังพยายามติดตามรูปแบบการควบคุมการเข้าถึงฐานบทบาทเพื่อ จำกัด สิ่งที่ผู้ใช้สามารถทำได้หรือไม่สามารถทำได้ในระบบของฉัน จนถึงตอนนี้ฉันมีหน่วยงานดังต่อไปนี้: users - ผู้ที่จะใช้ระบบ ที่นี่ฉันมีชื่อผู้ใช้และรหัสผ่าน role - การรวบรวมบทบาทที่ผู้ใช้สามารถมีได้ ทรัพยากรต่างๆ เช่นผู้จัดการผู้ดูแลระบบ ฯลฯ - สิ่งที่ผู้ใช้สามารถจัดการได้ เช่นเดียวกับสัญญาผู้ใช้ร่างสัญญา ฯลฯ การดำเนินการ - สิ่งที่ผู้ใช้สามารถทำกับทรัพยากร ชอบสร้างอ่านอัปเดตหรือลบ ตอนนี้ความสงสัยของฉันเพิ่มขึ้นที่นี่ในแผนภาพที่ฉันมีความสัมพันธ์เช่นนี้: การดำเนินงาน (0 .. *) จะดำเนินการเมื่อ ทรัพยากร (0 .. *) ซึ่งจะสร้างตารางที่ผมเรียกว่าสิทธิ์และที่จะจัดเก็บการดำเนินงานและทรัพยากร ตารางสิทธิ์จะมีลักษณะเช่นนี้ (หนึ่งแถว): ID: 1, การดำเนินการ:สร้าง, ทรัพยากร:สัญญา ซึ่งหมายถึงการได้รับอนุญาตในการสร้างสัญญา ฉันทำอย่างนี้เพราะฉันรู้สึกว่าทรัพยากรบางอย่างอาจไม่มีการดำเนินการทุกประเภท ตัวอย่างเช่นสำหรับการลงทะเบียนสัญญาผู้ใช้สามารถอัปโหลดไฟล์ได้ แต่การดำเนินการนี้ไม่สามารถใช้สำหรับการลงทะเบียนผู้ให้บริการได้ ดังนั้นตอนนี้เมื่อผู้ดูแลระบบจะให้สิทธิ์กับบทบาทเขาจะไม่มีรายชื่อของทรัพยากรที่มีการดำเนินการทุกครั้งที่ลงทะเบียนในระบบ ฉันคิดว่าแต่ละแหล่งข้อมูลมีการรวบรวมการดำเนินงานของตนเองที่สามารถดำเนินการกับเขาได้ ฉันสามารถชี้แจงได้หากบางสิ่งไม่เข้าใจ นี่เป็นวิธีที่ถูกต้องในการติดตั้ง rbac หรือไม่? แก้ไข …

8
ลงโทษผู้ใช้รหัสผ่านที่ไม่ปลอดภัย [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันกำลังคิดเกี่ยวกับการ จำกัด สิทธิ์ของผู้ใช้ที่เลือกรหัสผ่านที่ไม่ปลอดภัย (ความไม่มั่นคงของรหัสผ่านที่ถูกกำหนดโดยความยาวจำนวนอักขระ (ประเภทตัวพิมพ์ใหญ่ / ตัวน้อยตัวเลขสัญลักษณ์ ฯลฯ ) ที่มีความปลอดภัยและไม่ว่าจะเป็น อยู่ในตารางสายรุ้ง) เพื่อ จำกัด จำนวนความเสียหายที่บัญชีของพวกเขาสามารถทำได้หากถูกบุกรุก ฉันยังไม่มีแอปพลิเคชันสำหรับความคิดนี้ แต่บอกว่าฉันกำลังเขียนฟอรัมหรือบางสิ่ง: ผู้ใช้ที่ใช้ 1234 เป็นรหัสผ่านอาจต้องกรอก captcha ก่อนโพสต์หรืออาจมีมาตรการต่อต้านสแปมอย่างเข้มงวดเช่น เมื่อหมดเวลาหรือตัวกรองแบบเบย์ปฏิเสธเนื้อหาของพวกเขา หากฟอรัมนี้มีลำดับชั้นมากอนุญาตให้ "การส่งเสริม" แก่ผู้กลั่นกรองหรืออะไรก็ตามด้วยวิธีนี้จะหยุดพวกเขาจากการได้รับสิทธิพิเศษหรือบอกพวกเขาว่าพวกเขามีสิทธิ์ แต่ไม่ให้พวกเขาออกกำลังกายโดยไม่มีการเปลี่ยนแปลง รหัสผ่าน แน่นอนว่านี่อาจไม่ใช่มาตรการรักษาความปลอดภัยเพียงอย่างเดียว แต่อาจเป็นไปได้ด้วยดีถัดจากแนวทางการรักษาความปลอดภัย คุณคิดอย่างไร? นี่เป็นการทำเกินความตั้งใจขโมยโฟกัสไปที่การรักษาความปลอดภัยที่สำคัญกว่าเดิมหรือเป็นวิธีที่ดีในการจำกัดความเสี่ยงและกระตุ้นให้ผู้ใช้ใช้รหัสผ่านที่ปลอดภัยยิ่งขึ้น (และหวังว่าจะทำให้คนที่คุณเชื่อมั่น

1
อะไรคือแผนงานที่แนะนำให้นำไปใช้ในการควบคุมการเข้าถึงแบบง่าย (ABAC)
เมื่ออ่านเกี่ยวกับ ACL และ RBAC ฉันดูเหมือนจะเข้าใจง่าย - มีชื่อผู้ใช้หรือบทบาทที่ได้รับสิทธิ์เข้าถึงเนื้อหา ฉันยังสามารถดูว่าฉันสามารถใช้สิ่งเหล่านี้ได้อย่างไร เช่นภาพนี้ให้มุมมองที่ชัดเจนของ ACL และ RBAC สำหรับฉัน (ในขณะที่ฉันสามารถไปและออกแบบตารางฐานข้อมูลตามด้านบน): (รูปภาพมารยาทของpressbooks ) สิ่งที่ฉันกำลังดิ้นรนคือเอแบค ภาพต่าง ๆ ที่ฉันพบจนถึงตอนนี้มีลักษณะเป็นคลื่นหรือมีความซับซ้อนมากเกินไปหรือแนะนำให้ใช้บุคคลภายนอกซึ่งเป็นบุคคลที่สามที่ได้รับอนุญาต หรือให้ตัวอย่างคุณสมบัติแปลก ๆ ฉันไม่แน่ใจว่าจะใช้อย่างไร ตัวอย่างการเริ่มต้น ขอผมเริ่มด้วยบางสิ่งในชีวิตจริง สมมติว่าฉันมี บริษัท ที่มีพนักงาน 70-200 คน และสินทรัพย์ของฉันเพื่อป้องกันเป็นเว็บไซต์ที่มีหลายหน้า ฉันต้องการอนุญาตให้บางคนเข้าถึงเนื้อหาบางอย่าง ตัวอย่างเช่นฉันต้องการให้บุคคลLeslieสามารถเข้าถึงหน้าเว็บที่เรียกว่าPrice Managerและอนุญาตให้เธอจัดการราคาสำหรับTravelกลุ่มราคาในหน้านั้นเท่านั้น แต่ไม่สามารถจัดการราคาสำหรับProductกลุ่มในหน้าเดียวกันได้ ฉันจะใช้สิ่งนี้โดยใช้ ABAC ได้อย่างไร ฉันคิดว่าฉันสามารถกำหนดLeslieคุณลักษณะบางอย่างได้ (แต่มีคุณลักษณะใดบ้างและคุณสมบัติเหล่านี้มีอะไรบ้าง) จากนั้นให้ตารางฐานข้อมูลจัดเก็บข้อมูลเหล่านั้น ฉันสามารถออกแบบเอ็นจิ้นที่ดูที่คุณลักษณะเหล่านั้น (แต่ไม่ได้มองLeslieว่าเป็น "บทบาท" ที่ทำใน RBAC) และตัดสินใจจากที่นั่นว่าจะให้สิทธิ์การเข้าถึงเพจหรือไม่ เครื่องยนต์นั้นมีลักษณะอย่างไร มันง่ายหากบล็อก / …
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.