Misa a jour de sécurité +

Gestion des vues d'erreurs
ServeurDeTest
Noé GARNIER 2 years ago
parent 7c588bb476
commit 13fe75b05a

@ -23,9 +23,5 @@ $vues['signUp'] = 'View/src/pages/LogSign/SignUp.php';
$vues['enigme'] = 'View/src/pages/Enigme/palindrome.html';
//Error
$vues['erreurSignUp'] = 'View/Error/ErreurSignUp.php';
$vues['erreur'] = 'View/Error/Erreur.php';
$vues['erreurBd'] = 'View/Error/ErreurBd.php';
$vues['erreurLoginEmail'] = 'View/Error/ErreurLoginEmail.php';
$vues['erreurLoginMdp'] = 'View/Error/ErreurLoginMdp.php';
$vues['erreur404'] = 'View/Error/Erreur404.php';
$vues['erreur'] = 'View/src/pages/Erreur.php';
$error = "";

@ -30,10 +30,11 @@ class Validation
return true;
}
public function ValidateUsername(string $username) : bool{
if(!filter_var($username,FILTER_VALIDATE_REGEXP,array("options" => array( "regexp" => "^[^&=_'\-+;<>.]{1,18}$" ))))
{
return false;
}
// if(!filter_var($username,FILTER_VALIDATE_REGEXP,array("options" => array( "regexp" => "^[^&=_'\-+;<>.]{1,18}$" ))))
// {
// return false;
// }
return true;
}
public function ValidatePassword(string $password) : bool{

@ -1,4 +1,5 @@
<?php
use Vtiful\Kernel\Excel;
class Controller
{
@ -11,7 +12,7 @@ class Controller
$this->con=$con;
session_start();
try{
global $rep, $vues;
global $rep, $vues, $error;
$action=$_REQUEST['action'];
switch($action) {
case NULL:
@ -41,96 +42,111 @@ class Controller
}
} catch (PDOException $e)
{
require ($rep.$vues['erreurBd']);
$error = $e->getMessage();
require ($rep.$vues['erreur']);
}
}
private function signUp() {
global $rep, $vues, $sel;
global $rep, $vues, $sel, $error;
try {
$gateway = new JoueurGateway($this->con);
$validation = new Validation();
if (! $validation->ValidateEmail($_REQUEST['email'])) {
$error = "Email invalides.";
throw (new Exception("Email non valide"));
}
if(! $validation->ValidateUsername($_REQUEST['username'])){
$error = "Nom d'utilisateur invalides. Il ne doit pas contenir de caractère spéciaux.";
throw(new Exception("Pseudo non valide"));
}
if(! $validation->ValidatePassword($_REQUEST['password'])){
throw(new InvalidMdpException("Mot de passe non valide"));
$error = "Mots de passe invalides. Il ne doit pas dépasser 100 caractères.";
throw(new Exception("Mot de passe non valide"));
}
$password = password_hash($_REQUEST['password']+$selNoHash, PASSWORD_DEFAULT);
$j = $gateway->getJoueurByEmail($_REQUEST['email']);
if ($j != null) {
$error = "Email déjà utilisé.";
throw (new Exception("Email déjà utilisé"));
}
$password = password_hash($_REQUEST['password'], PASSWORD_DEFAULT);
$joueur = new Joueur($_REQUEST['email'], $_REQUEST['username'], $password);
$gateway->insert($joueur);
$_SESSION['connected'] = 'true';
require ($rep.$vues['main']);
}catch (Exception $e){
require($rep.$vues['erreurSignUp']);
require($rep.$vues['erreur']);
}
}
private function login(){
global $rep, $vues, $sel;
global $rep, $vues, $sel, $error;
try {
$gateway = new JoueurGateway($this->con);
$joueur = $gateway->getJoueurByEmail($_REQUEST['email']);
if ($joueur->getEmail() == null){
throw new JoueurNotFoundException("Joueur introuvable");
$error = "Joueur non trouvé.";
throw new Exception("Joueur introuvable");
}
$mdp = $gateway->getMdpByEmail($_REQUEST['email']);
if (password_verify($mdp, $_REQUEST['password']+$sel)){
throw new InvalidMdpException("Mot de passe invalide");
if (password_verify($mdp, $_REQUEST['password'])){
$error = "Mot de passe incorrect.";
throw new Exception("Mot de passe invalide");
}
$_SESSION['connected'] = 'true';
require ($rep.$vues['main']);
}catch (JoueurNotFoundException $e){
require($rep.$vues['erreurLoginEmail']);
}catch (InvalidMdpException $m) {
require($rep . $vues['erreurLoginMdp']);
}catch (Exception $e){
require($rep.$vues['erreur']);
}
}
// require error page with given message
private function goToPresentation() {
global $rep, $vues;
global $rep, $vues, $error;
try {
require ($rep.$vues['presenation']);
}catch (Exception $e){
require($rep.$vues['erreur404']);
$error = "Erreur Inconnue";
require($rep.$vues['erreur']);
}
}
private function goToHome() {
global $rep, $vues;
global $rep, $vues, $error;
try {
require ($rep.$vues['main']);
}catch (Exception $e){
require($rep.$vues['erreur404']);
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToLogin() {
global $rep, $vues;
global $rep, $vues, $error;
try {
require ($rep.$vues['login']);
}catch (Exception $e){
require($rep.$vues['erreur404']);
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToSignUp() {
global $rep, $vues;
global $rep, $vues, $error;
try {
require ($rep.$vues['signUp']);
}catch (Exception $e){
require($rep.$vues['erreur404']);
$error = "404";
require($rep.$vues['erreur']);
}
}
private function goToEnigme() {
global $rep, $vues;
global $rep, $vues, $error;
try {
require ($rep.$vues['enigme']);
}catch (Exception $e){
require($rep.$vues['erreur404']);
$error = "404";
require($rep.$vues['erreur']);
}
}
}

@ -1,10 +0,0 @@
<?php
class InvalidMdpException extends Exception {
public function errorMessage() {
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> Mdp invalide';
return $errorMsg;
}
}

@ -35,6 +35,7 @@ class JoueurGateway
}
public function getJoueurByEmail(string $email) : Joueur{
global $error;
$query = "SELECT * FROM Joueur WHERE email=:email";
$this->con->executeQuery($query, array(
':email' => array($email,PDO::PARAM_STR)
@ -46,12 +47,14 @@ class JoueurGateway
$mdp=$row['mdp'];
}
if ($results == null){
throw new JoueurNotFoundException("Joueur Introuvable");
$error = "Joueur non trouvé.";
throw new Exception("Joueur Introuvable");
}
return new Joueur($email, $pseudo, $mdp);
}
public function getMdpByEmail(string $email) : string{
global $error;
$query = "SELECT mdp FROM Joueur WHERE email=:email";
$this->con->executeQuery($query, array(
':email' => array($email,PDO::PARAM_STR)
@ -61,7 +64,8 @@ class JoueurGateway
$mdp=$row['mdp'];
}
if ($results == null){
throw new InvalidMdpException("Mots de passe Incorrect");
$error = "Mot de passe non trouvé.";
throw new Exception("Mots de passe Incorrect");
}
return $mdp;
}

@ -1,10 +0,0 @@
<?php
class JoueurNotFoundException extends Exception {
public function errorMessage() {
//error message
$errorMsg = 'Error on line '.$this->getLine().' in '.$this->getFile()
.': <b>'.$this->getMessage().'</b> Joueur not found';
return $errorMsg;
}
}

@ -1,9 +0,0 @@
<html>
<body>
<h1>ERREUR</h1>
<p>Erreur inatendu</p>
<?php
?>
</body>
</html>

@ -1,9 +0,0 @@
<html>
<body>
<h1>ERREUR</h1>
<p>Page introuvable</p>
<?php
?>
</body>
</html>

@ -1,9 +0,0 @@
<html>
<body>
<h1>ERREUR</h1>
<p>Erreur avec la base de donnée</p>
<?php
?>
</body>
</html>

@ -1,10 +0,0 @@
<html>
<body>
<h1>ERREUR</h1>
<p>Joueur introuvable</p>
<?php
?>
</body>
</html>

@ -1,10 +0,0 @@
<html>
<body>
<h1>ERREUR</h1>
<p>Mot de passe invalide</p>
<?php
?>
</body>
</html>

@ -1,10 +0,0 @@
<html>
<body>
<h1>ERREUR</h1>
<p></p>
<?php
?>
</body>
</html>

@ -0,0 +1,125 @@
@import 'https://fonts.googleapis.com/css?family=Inconsolata';
html {
min-height: 100%;
}
body {
box-sizing: border-box;
height: 100%;
background-color: #000000;
background-image: radial-gradient(#11581E, #041607), url("https://media.giphy.com/media/oEI9uBYSzLpBK/giphy.gif");
background-repeat: no-repeat;
background-size: cover;
font-family: 'Inconsolata', Helvetica, sans-serif;
font-size: 1.5rem;
color: rgba(128, 255, 128, 0.8);
text-shadow:
0 0 1ex rgba(51, 255, 51, 1),
0 0 2px rgba(255, 255, 255, 0.8);
}
.noise {
pointer-events: none;
position: absolute;
width: 100%;
height: 100%;
background-image: url("https://media.giphy.com/media/oEI9uBYSzLpBK/giphy.gif");
background-repeat: no-repeat;
background-size: cover;
z-index: -1;
opacity: .02;
}
.overlay {
pointer-events: none;
position: absolute;
width: 100%;
height: 100%;
background:
repeating-linear-gradient(
180deg,
rgba(0, 0, 0, 0) 0,
rgba(0, 0, 0, 0.3) 50%,
rgba(0, 0, 0, 0) 100%);
background-size: auto 4px;
z-index: 1;
}
.overlay::before {
content: "";
pointer-events: none;
position: absolute;
display: block;
top: 0;
left: 0;
right: 0;
bottom: 0;
width: 100%;
height: 100%;
background-image: linear-gradient(
0deg,
transparent 0%,
rgba(32, 128, 32, 0.2) 2%,
rgba(32, 128, 32, 0.8) 3%,
rgba(32, 128, 32, 0.2) 3%,
transparent 100%);
background-repeat: no-repeat;
animation: scan 7.5s linear 0s infinite;
}
@keyframes scan {
0% { background-position: 0 -100vh; }
35%, 100% { background-position: 0 100vh; }
}
.terminal {
box-sizing: inherit;
position: absolute;
height: 100%;
width: auto;
max-width: 100%;
padding: 4rem;
text-transform: uppercase;
}
.output {
color: rgba(128, 255, 128, 0.8);
text-shadow:
0 0 1px rgba(51, 255, 51, 0.4),
0 0 2px rgba(255, 255, 255, 0.8);
}
.output::before {
content: "> ";
}
/*
.input {
color: rgba(192, 255, 192, 0.8);
text-shadow:
0 0 1px rgba(51, 255, 51, 0.4),
0 0 2px rgba(255, 255, 255, 0.8);
}
.input::before {
content: "$ ";
}
*/
a {
color: #fff;
text-decoration: none;
}
a::before {
content: "[";
}
a::after {
content: "]";
}
.errorcode {
color: white;
}

@ -0,0 +1,40 @@
<!DOCTYPE html>
<html lang="en">
<head>
<title>Scripted</title>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to-fit=no"
/>
<link rel="stylesheet" href="./View/src/CSS/Erreur.css" />
</head>
<body>
<div class="noise"></div>
<div class="overlay"></div>
<div class="terminal">
<?php
if ($error == 400){
echo '<h1>Error <span class="errorcode">404</span></h1>';
echo '<p class="output">La page que vous recherchez a peut-être été supprimée, a changé de nom ou est temporairement indisponible.</p>';
echo '<p class="output">Veuillez essayer de <a href="javascript:history.back()">retourner en arrière</a> ou de <a href="index.php?action=goToHome">retourné à la page d\'accueil</a>.</p>';
echo '<p class="output">Bonne Chance Utilisateur.</p>';
}
elseif ($error == ""){
echo '<h1>Error <span class="errorcode">000</span></h1>';
echo '<p class="output">Erreur inconnue</p>';
echo '<p class="output">Veuillez essayer de <a href="javascript:history.back()">retourner en arrière</a> ou de <a href="index.php?action=goToHome">retourné à la page d\'accueil</a>.</p>';
echo '<p class="output">Bonne Chance Utilisateur.</p>';
}
else{
echo '<h1>Error <span class="errorcode">000</span></h1>';
echo '<p class="output">'.$error.'</p>';
echo '<p class="output">Veuillez essayer de <a href="javascript:history.back()">retourner en arrière</a> ou de <a href="index.php?action=goToHome">retourné à la page d\'accueil</a>.</p>';
echo '<p class="output">Bonne Chance Utilisateur.</p>';
}
?>
</div>
</body>
</html>
Loading…
Cancel
Save