- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我有一个扩展到多个类文件的大项目。这个项目是在赶时间前匆忙完成的。这对项目安全造成了影响。所以简单来说,理论上任何人都可以在我的项目中调用一个 AJAX 脚本并让它运行,因为脚本中的函数不是用户权限感知的。当然,我会检查我所有的 AJAX PHP 脚本以查看用户是否已登录。
Ví dụ:
// Update user information. This script is called with jQuery AJAX:
include('../../../config/config.php');
require_once('classes/Autoloader.php');
$iris = new IRIS();
if( !$iris->UUID() ){
die( "Unauthorized access! ");
}
$result = array('success'=>true);
$users = new users();
thử {
$res = $users->createUser();
$result = array( 'success' => true, 'result' => $_POST );
}
catch(Exception $e){
$result = array( 'error' => true, 'errmsg' => $e->getMessage() );
}
echo json_encode( $result );
我有 3 个用户类:“Admin”、“client”、“employee”。现在理论上,所有这些都可以调用此 php 脚本,并修改用户,即使只有管理员有权执行此操作。用户在数据库中指定了权限参数,我在项目中通过常量定义:
define('USER_AUTH_LEVEL', $_SESSION['auth_level']);
我知道我可以更新每个 AJAX PHP 文件并设置:
if( USER_AUTH_LEVEL !== 1 ) { die( 'You do not have access' ); }
但我想做的是保护所有或部分类的功能。比方说:
class IRIS {
public function doSomething(){
// $function_access not defined, accessable by all
}
public function doSomethingAdmin(){
$function_access = 1;
// Should be limited to admins
}
public function doSomethingClient(){
$function_access = 2;
// Should be limited to clients
}
}
我想要实现的是一个脚本,无论它在哪个类中运行,每次函数都会运行。此脚本应检查是否设置了参数 $function_access
。如果是,它应该与当前登录用户的权限级别进行比较。如果不匹配,函数应该中断。如果根本没有定义,任何人都可以运行该函数。
有没有人有办法解决这个问题?我在这里完全空白。
câu trả lời hay nhất
您需要在任何函数调用之前调用一些函数。为此,请使用 __call
phương pháp:
class IRIS extends Access {
/* other methods here */
// list all methods to allow some access levels.
public function accessControll() {
return [
parent::ADMIN => ['doSomethingAdmin', 'doSomethingElseAdmin'],
parent::USER => ['doSomething', 'doSomethingElse'],
];
}
}
abstract class Access {
// access levels defines
const ADMIN = 1, USER = 2;
public function __call($method, $arguments) {
$accessLevel = -1;
// get access level of current method
foreach ($this->accessControll() as $key => $group) {
if (in_array($method, $group)) {
$accessLevel = $key;
phá vỡ;
}
}
if (USER_AUTH_LEVEL !== $accessLevel) {
throw new Exception('You do not have access');
// OR header('HTTP/1.0 401 not authorized');
}
}
// abstract, so every class, that extends it must have this method.
abstract public function accessControll();
}
关于php - 保护/限制用户组功能的良好做法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26293500/
Khi lập mô hình sơ đồ ca sử dụng ứng dụng web, có tốt hơn không nếu tạo một vai trò cho mọi vai trò mà người dùng có thể có? Hoặc có vai trò, người dùng và ma trận có đặc quyền? khách < người dùng < người điều hành < quản trị viên 1: khách, người dùng, người điều hành
Tôi không thể kết nối với Postgres bằng Elixir: ** (Trộn) Không thể tạo cơ sở dữ liệu cho PhoenixChat.Repo: FATAL 28P
Câu hỏi này đã có câu trả lời: Nhóm theo tên trường trong Java (7 câu trả lời) Đã đóng 7 năm trước. Tôi phải viết một phương thức lấy Danh sách và trả về Bản đồ > Người dùng chứa Người.
Cảm ơn sự giúp đỡ của bạn, trước tiên tôi sẽ hiển thị mã: $dotaz = "Chọn * từ khách hàng THAM GIA hợp đồng trong đó khách hàng.user_id ='".$_SESS
Tôi chỉ muốn hiển thị một nút cho một người dùng trong số tất cả người dùng. Tôi đã thử orderByKey() nhưng không thành công! Mô hình người dùng có thành viên id và tôi đã thử sử dụng orderByChild("id") nhưng kết quả tương tự!
Chúng tôi đang chuyển từ MongoDB sang Postgres tại nơi làm việc và tôi đang thiết lập nhóm BDR. Ở bước này, tôi đang nghĩ đến vấn đề bảo mật và khóa càng nhiều càng tốt. Vì vậy, tôi muốn thiết lập một người dùng (vai trò) sao chép và có BDR
xuất khẩu lớp UserListComponent thực hiện OnInit{ người dùng; constructor(private userService: UserS
Tôi có thể sử dụng Gói người dùng Sonata để tích hợp gói FOS vào gói Quản trị sonata. Đăng nhập của tôi đang hoạt động tốt. Bây giờ tôi muốn thêm chức năng như đổi mật khẩu trong FOSUserBundle sang sonata
Khi tạo một ứng dụng mới trong LinkedIn, tôi nhận được 4 mã riêng biệt: Khóa API Khóa bí mật Mã thông báo người dùng OAuth Mật khẩu người dùng OAuth Tôi sử dụng hai mã đầu tiên trong luồng OAuth. Mục đích là gì? cuối cùng
Vì vậy..tôi đã giải quyết được gần như tất cả các vấn đề. Nhưng bây giờ tôi có một vấn đề khác cần giải quyết. Tôi đã sử dụng chuỗi kết nối này: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
Tôi có một nhóm "người dùng" và một nhóm "đơn đặt hàng". Tôi muốn liệt kê tất cả order_id cho mỗi user_id. var user = { 0: { user_id: 111, us
Tôi đã tạo một mô hình người dùng cho lớp ứng dụng Django Người dùng (Mô hình): """ Mô hình xác thực. Cái này chứa u
Tôi bị mắc kẹt trong vấn đề này và không thể tìm ra giải pháp. Tìm một hướng nào đó. Tôi đang phát triển một dự án mới bằng laravel và hiện đang nghiên cứu xác thực người dùng. Tôi đang sử dụng mô-đun xác thực Laravels 5.8. Thực hiện một số thay đổi đối với Chế độ xem khôi phục mật khẩu
Sau khi cài đặt, tôi đang sử dụng ansible để định cấu hình một số máy tính. Để làm điều này, tôi chạy ansible cục bộ trên máy của mình. Người dùng "chính" trong quá trình cài đặt thường có tên khác. Tôi muốn sử dụng người dùng đó cho một biến như Become_user.
Tôi đang cố gắng tạo một tệp bó chạy syncdb để tạo tệp cơ sở dữ liệu, sau đó tạo siêu người dùng với tên người dùng "quản trị viên" và mật khẩu "quản trị viên". Mã của tôi cho đến nay: quản lý python.
đóng cửa. Câu hỏi này dựa trên ý kiến. Câu trả lời không được chấp nhận vào thời điểm này. Bạn muốn cải thiện câu hỏi này? Cập nhật câu hỏi để việc chỉnh sửa bài đăng này có thể trả lời nó bằng sự thật và trích dẫn. Đã đóng cửa 6 năm trước. cải tiến
Tôi đã thiết lập sao chép địa lý trên máy chủ cơ sở dữ liệu Azure. Một trong những cơ sở dữ liệu chạy trên máy chủ có thông tin đăng nhập và người dùng tôi đã tạo qua SSMS: https://learn.microsoft.com/en-us/azure/s
Tôi có ứng dụng ionic 2 và đang sử dụng Đăng nhập FB gốc để truy xuất tên/hình ảnh và lưu nó vào NativeStorage. Quá trình là tôi mở WelcomePage, đăng nhập và lưu dữ liệu. từ đó nhé
Đây là phương thức xác thực người dùng của tôi: def user_login(request): if request.method == 'POST': username = request.P
Tôi đang cố gắng lấy tất cả các tweet từ một người dùng cụ thể nhưng khi tôi lặp lại các tweet được đưa vào mẫu, tôi nhận được đối tượng "Người dùng" không thể lặp lại lượt xem tweets = User.objects.get(username__iexact='us
Tôi là một lập trình viên xuất sắc, rất giỏi!