This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php /** MicroUser */ |
||
2 | |||
3 | namespace Micro\Web; |
||
4 | |||
5 | use Micro\Auth\Injector as AuthInjector; |
||
6 | use Micro\Base\Exception; |
||
7 | |||
8 | |||
9 | /** |
||
10 | * Micro user class file |
||
11 | * |
||
12 | * @author Oleg Lunegov <[email protected]> |
||
13 | * @link https://github.com/linpax/microphp-framework |
||
14 | * @copyright Copyright (c) 2013 Oleg Lunegov |
||
15 | * @license https://github.com/linpax/microphp-framework/blob/master/LICENSE |
||
16 | * @package Micro |
||
17 | * @subpackage Web |
||
18 | * @version 1.0 |
||
19 | * @since 1.0 |
||
20 | */ |
||
21 | class User implements IUser |
||
22 | { |
||
23 | protected $session; |
||
24 | |||
25 | /** |
||
26 | * @access public |
||
27 | * @param ISession $session |
||
28 | * @result void |
||
29 | */ |
||
30 | public function __construct(ISession $session) |
||
31 | { |
||
32 | $this->session = $session; |
||
33 | } |
||
34 | |||
35 | /** |
||
36 | * @param string $permission |
||
37 | * @param array $data |
||
38 | * @return bool |
||
39 | * @throws Exception |
||
40 | */ |
||
41 | public function check($permission, array $data = []) |
||
42 | { |
||
43 | if (!$this->isGuest()) { |
||
44 | return (new AuthInjector)->build()->check($this->getID(), $permission, $data); |
||
0 ignored issues
–
show
|
|||
45 | } else { |
||
46 | return false; |
||
47 | } |
||
48 | } |
||
49 | |||
50 | /** |
||
51 | * @return bool |
||
52 | * @throws Exception |
||
53 | */ |
||
54 | public function isGuest() |
||
55 | { |
||
56 | return !$this->session->UserID; |
||
0 ignored issues
–
show
Accessing
UserID on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() |
|||
57 | } |
||
58 | |||
59 | /** |
||
60 | * @return bool|int |
||
61 | * @throws Exception |
||
62 | */ |
||
63 | public function getID() |
||
64 | { |
||
65 | return (!$this->isGuest()) ? $this->session->UserID : false; |
||
0 ignored issues
–
show
Accessing
UserID on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() |
|||
66 | } |
||
67 | |||
68 | /** |
||
69 | * @param int|string $userId |
||
70 | * @throws Exception |
||
71 | */ |
||
72 | public function login($userId) |
||
73 | { |
||
74 | $this->setID($userId); |
||
75 | } |
||
76 | |||
77 | /** |
||
78 | * @param mixed $id |
||
79 | * @throws Exception |
||
80 | */ |
||
81 | public function setID($id) |
||
82 | { |
||
83 | $this->session->UserID = $id; |
||
0 ignored issues
–
show
Accessing
UserID on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() |
|||
84 | } |
||
85 | |||
86 | /** |
||
87 | * @throws Exception |
||
88 | */ |
||
89 | public function logout() |
||
90 | { |
||
91 | if (!$this->isGuest()) { |
||
92 | $this->setID(null); |
||
93 | $this->session->destroy(); |
||
94 | } |
||
95 | } |
||
96 | |||
97 | /** |
||
98 | * @return string |
||
99 | * @throws Exception |
||
100 | */ |
||
101 | public function getCaptcha() |
||
102 | { |
||
103 | return $this->session->captchaCode; |
||
0 ignored issues
–
show
Accessing
captchaCode on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() |
|||
104 | } |
||
105 | |||
106 | /** |
||
107 | * @param string $code |
||
108 | * @throws Exception |
||
109 | */ |
||
110 | public function setCaptcha($code) |
||
111 | { |
||
112 | $this->session->captchaCode = md5($code); |
||
0 ignored issues
–
show
Accessing
captchaCode on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() |
|||
113 | } |
||
114 | |||
115 | /** |
||
116 | * @param string $code |
||
117 | * @return bool|null |
||
118 | * @throws Exception |
||
119 | */ |
||
120 | public function checkCaptcha($code) |
||
121 | { |
||
122 | if (!$this->session->captchaCode) { |
||
0 ignored issues
–
show
Accessing
captchaCode on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() |
|||
123 | return null; |
||
124 | } |
||
125 | |||
126 | return $this->session->captchaCode === md5($code); |
||
0 ignored issues
–
show
Accessing
captchaCode on the interface Micro\Web\ISession suggest that you code against a concrete implementation. How about adding an instanceof check?
If you access a property on an interface, you most likely code against a concrete implementation of the interface. Available Fixes
![]() The return type of
return $this->session->c...chaCode === md5($code); (boolean ) is incompatible with the return type declared by the interface Micro\Web\IUser::checkCaptcha of type string .
If you return a value from a function or method, it should be a sub-type of the type that is given by the parent type f.e. an interface, or abstract method. This is more formally defined by the Lizkov substitution principle, and guarantees that classes that depend on the parent type can use any instance of a child type interchangably. This principle also belongs to the SOLID principles for object oriented design. Let’s take a look at an example: class Author {
private $name;
public function __construct($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
}
abstract class Post {
public function getAuthor() {
return 'Johannes';
}
}
class BlogPost extends Post {
public function getAuthor() {
return new Author('Johannes');
}
}
class ForumPost extends Post { /* ... */ }
function my_function(Post $post) {
echo strtoupper($post->getAuthor());
}
Our function ![]() |
|||
127 | } |
||
128 | } |
||
129 |
This check looks at variables that are passed out again to other methods.
If the outgoing method call has stricter type requirements than the method itself, an issue is raised.
An additional type check may prevent trouble.