forked from ZwiiCMS-Team/ZwiiCMS
Faille CSRF
This commit is contained in:
parent
91002c8393
commit
ee85455248
@ -8,6 +8,9 @@
|
|||||||
- Deux blocs (colonnes) à droite ou à gauche contenant des informations fixes, le paramétage est dans le thème, mais les contenus sont stockés dans les pages.
|
- Deux blocs (colonnes) à droite ou à gauche contenant des informations fixes, le paramétage est dans le thème, mais les contenus sont stockés dans les pages.
|
||||||
- Correction :
|
- Correction :
|
||||||
- Faille CSRF lors de l'effacement d'une page
|
- Faille CSRF lors de l'effacement d'une page
|
||||||
|
- Faille CSRF lors de l'effacement d'une galerie
|
||||||
|
- Faille CSRF lors de l'effacement d'un article de blog
|
||||||
|
- Faille CSRF lors de l'effacement d'un article de news
|
||||||
|
|
||||||
## Verison 8.5.3
|
## Verison 8.5.3
|
||||||
* Modification :
|
* Modification :
|
||||||
|
@ -88,10 +88,13 @@ class user extends common {
|
|||||||
* Suppression
|
* Suppression
|
||||||
*/
|
*/
|
||||||
public function delete() {
|
public function delete() {
|
||||||
|
//
|
||||||
|
// $url prend l'adresse sans le token
|
||||||
|
$url = explode('&',$this->getUrl(2));
|
||||||
// Accès refusé
|
// Accès refusé
|
||||||
if(
|
if(
|
||||||
// L'utilisateur n'existe pas
|
// L'utilisateur n'existe pas
|
||||||
$this->getData(['user', $this->getUrl(2)]) === null
|
$this->getData(['user', $url[0]]) === null
|
||||||
// Groupe insuffisant
|
// Groupe insuffisant
|
||||||
AND ($this->getUrl('group') < self::GROUP_MODERATOR)
|
AND ($this->getUrl('group') < self::GROUP_MODERATOR)
|
||||||
) {
|
) {
|
||||||
@ -100,8 +103,23 @@ class user extends common {
|
|||||||
'access' => false
|
'access' => false
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Jeton incorrect
|
||||||
|
elseif(!isset($_GET['csrf'])) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'user',
|
||||||
|
'notification' => 'Jeton invalide'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'user',
|
||||||
|
'notification' => 'Suppression non autorisée'
|
||||||
|
]);
|
||||||
|
}
|
||||||
// Bloque la suppression de son propre compte
|
// Bloque la suppression de son propre compte
|
||||||
elseif($this->getUser('id') === $this->getUrl(2)) {
|
elseif($this->getUser('id') === $url[0]) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . 'user',
|
'redirect' => helper::baseUrl() . 'user',
|
||||||
@ -110,7 +128,7 @@ class user extends common {
|
|||||||
}
|
}
|
||||||
// Suppression
|
// Suppression
|
||||||
else {
|
else {
|
||||||
$this->deleteData(['user', $this->getUrl(2)]);
|
$this->deleteData(['user', $url[0]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . 'user',
|
'redirect' => helper::baseUrl() . 'user',
|
||||||
@ -280,7 +298,7 @@ class user extends common {
|
|||||||
]),
|
]),
|
||||||
template::button('userDelete' . $userId, [
|
template::button('userDelete' . $userId, [
|
||||||
'class' => 'userDelete buttonRed',
|
'class' => 'userDelete buttonRed',
|
||||||
'href' => helper::baseUrl() . 'user/delete/' . $userId,
|
'href' => helper::baseUrl() . 'user/delete/' . $userId. '&csrf=' . $_SESSION['csrf'],
|
||||||
'value' => template::ico('cancel')
|
'value' => template::ico('cancel')
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
|
@ -174,7 +174,7 @@ class blog extends common {
|
|||||||
]),
|
]),
|
||||||
template::button('blogConfigDelete' . $articleIds[$i], [
|
template::button('blogConfigDelete' . $articleIds[$i], [
|
||||||
'class' => 'blogConfigDelete buttonRed',
|
'class' => 'blogConfigDelete buttonRed',
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $articleIds[$i],
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $articleIds[$i] . '&csrf=' . $_SESSION['csrf'],
|
||||||
'value' => template::ico('cancel')
|
'value' => template::ico('cancel')
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
@ -190,16 +190,33 @@ class blog extends common {
|
|||||||
* Suppression
|
* Suppression
|
||||||
*/
|
*/
|
||||||
public function delete() {
|
public function delete() {
|
||||||
|
// $url prend l'adresse sans le token
|
||||||
|
$url = explode('&',$this->getUrl(2));
|
||||||
// L'article n'existe pas
|
// L'article n'existe pas
|
||||||
if($this->getData(['module', $this->getUrl(0), $this->getUrl(2)]) === null) {
|
if($this->getData(['module', $this->getUrl(0), $url[0]]) === null) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'access' => false
|
'access' => false
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Jeton incorrect
|
||||||
|
elseif(!isset($_GET['csrf'])) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl(). $this->getUrl(0) . '/config',
|
||||||
|
'notification' => 'Jeton invalide'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => 'Suppression non autorisée'
|
||||||
|
]);
|
||||||
|
}
|
||||||
// Suppression
|
// Suppression
|
||||||
else {
|
else {
|
||||||
$this->deleteData(['module', $this->getUrl(0), $this->getUrl(2)]);
|
$this->deleteData(['module', $this->getUrl(0), $url[0]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
@ -59,7 +59,7 @@ class gallery extends common {
|
|||||||
]),
|
]),
|
||||||
template::button('galleryConfigDelete' . $galleryId, [
|
template::button('galleryConfigDelete' . $galleryId, [
|
||||||
'class' => 'galleryConfigDelete buttonRed',
|
'class' => 'galleryConfigDelete buttonRed',
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $galleryId,
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $galleryId . '&csrf=' . $_SESSION['csrf'],
|
||||||
'value' => template::ico('cancel')
|
'value' => template::ico('cancel')
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
@ -93,16 +93,33 @@ class gallery extends common {
|
|||||||
* Suppression
|
* Suppression
|
||||||
*/
|
*/
|
||||||
public function delete() {
|
public function delete() {
|
||||||
|
// $url prend l'adresse sans le token
|
||||||
|
$url = explode('&',$this->getUrl(2));
|
||||||
// La galerie n'existe pas
|
// La galerie n'existe pas
|
||||||
if($this->getData(['module', $this->getUrl(0), $this->getUrl(2)]) === null) {
|
if($this->getData(['module', $this->getUrl(0), $url[0]]) === null) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'access' => false
|
'access' => false
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Jeton incorrect
|
||||||
|
elseif(!isset($_GET['csrf'])) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'config',
|
||||||
|
'notification' => 'Jeton invalide'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . 'config',
|
||||||
|
'notification' => 'Suppression non autorisée'
|
||||||
|
]);
|
||||||
|
}
|
||||||
// Suppression
|
// Suppression
|
||||||
else {
|
else {
|
||||||
$this->deleteData(['module', $this->getUrl(0), $this->getUrl(2)]);
|
$this->deleteData(['module', $this->getUrl(0), $url[0]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
@ -100,7 +100,7 @@ class news extends common {
|
|||||||
]),
|
]),
|
||||||
template::button('newsConfigDelete' . $newsIds[$i], [
|
template::button('newsConfigDelete' . $newsIds[$i], [
|
||||||
'class' => 'newsConfigDelete buttonRed',
|
'class' => 'newsConfigDelete buttonRed',
|
||||||
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $newsIds[$i],
|
'href' => helper::baseUrl() . $this->getUrl(0) . '/delete/' . $newsIds[$i] . '&csrf=' . $_SESSION['csrf'],
|
||||||
'value' => template::ico('cancel')
|
'value' => template::ico('cancel')
|
||||||
])
|
])
|
||||||
];
|
];
|
||||||
@ -116,16 +116,33 @@ class news extends common {
|
|||||||
* Suppression
|
* Suppression
|
||||||
*/
|
*/
|
||||||
public function delete() {
|
public function delete() {
|
||||||
|
// $url prend l'adresse sans le token
|
||||||
|
$url = explode('&',$this->getUrl(2));
|
||||||
// La news n'existe pas
|
// La news n'existe pas
|
||||||
if($this->getData(['module', $this->getUrl(0), $this->getUrl(2)]) === null) {
|
if($this->getData(['module', $this->getUrl(0), $url[0]]) === null) {
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'access' => false
|
'access' => false
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
// Jeton incorrect
|
||||||
|
elseif(!isset($_GET['csrf'])) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl(). $this->getUrl(0) . '/config',
|
||||||
|
'notification' => 'Jeton invalide'
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
elseif ($_GET['csrf'] !== $_SESSION['csrf']) {
|
||||||
|
// Valeurs en sortie
|
||||||
|
$this->addOutput([
|
||||||
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
'notification' => 'Suppression non autorisée'
|
||||||
|
]);
|
||||||
|
}
|
||||||
// Suppression
|
// Suppression
|
||||||
else {
|
else {
|
||||||
$this->deleteData(['module', $this->getUrl(0), $this->getUrl(2)]);
|
$this->deleteData(['module', $this->getUrl(0), $url[0]]);
|
||||||
// Valeurs en sortie
|
// Valeurs en sortie
|
||||||
$this->addOutput([
|
$this->addOutput([
|
||||||
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
'redirect' => helper::baseUrl() . $this->getUrl(0) . '/config',
|
||||||
|
Loading…
Reference in New Issue
Block a user