我用CheckMarx进行了扫描,发现了违反信任边界的问题,他们犯了一些错误,我尝试了几种技术,但无法解决问题:(您能帮我解决这个问题吗?
我的所有$ _SESSION均显示错误
我的处理页面:
public static function LoginVerification($email, $password){
// Connexion bdd
include("./function/conn.php"); // Connexion à la base de donnée
// Sécurisation données envoyer BDD
$email = Securite::bdd($email);
$password = Securite::bdd($password);
// Récupération de l'utilisateur et de sont mot de passe
$resultat = pg_prepare($conn_qualys,"log",'SELECT
utilisateurs.id, --0
utilisateurs.prenom, --1
utilisateurs.nom, --2
app_utilisateurs_droit.droit_id, --3
app_utilisateurs_droit.droit_fret, --4
app_utilisateurs_droit.droit_dosn_infra, --5
app_utilisateurs_droit.droit_voyage, --6
app_utilisateurs_droit.droit_region, --7
app_utilisateurs_droit.droit_reseau, --8
app_utilisateurs_droit.droit_autres, --9
utilisateurs.email, --10
utilisateurs.password, --11
utilisateurs.niveau, --12
app_utilisateurs_droit.droit_applications, --13
app_utilisateurs_droit.droit_all, --14
app_utilisateurs_droit.droit_gares, --15
app_utilisateurs_droit.droit_dsifis --16
FROM utilisateurs INNER JOIN app_utilisateurs_droit ON app_utilisateurs_droit.id = utilisateurs.id WHERE utilisateurs.email = $1');
$resultat = pg_execute($conn_qualys,"log",array( $email ));
if (!$resultat || !pg_fetch_row($resultat)) {
echo '<div class="erreur_mdp"><p class="text">L"email ou le mot de passe est incorrect.</p></div>';
} else {
if (pg_fetch_result($resultat, 0, 11) == null) {
echo 'Erreur dans le mot de passe';
} else {
$bdd_password = pg_fetch_result($resultat, 0, 11); // Variable pour récuperer les élèment renseigner en base de donnée
// Comparaison du pass envoyé via le formulaire avec la base
if (password_verify($password, $bdd_password)) { // Connexion a l'application si bon mot de passe et adresse e-mail.
if ($_SESSION['email'] == null) {
echo 'erreur dans email';
} else {
$_SESSION['email'] = pg_fetch_result($resultat, 0, 10);
}
$_SESSION['password'] = pg_fetch_result($resultat, 0, 11);
$_SESSION['name'] = pg_fetch_result($resultat, 0, 2);
$_SESSION['prenom'] = pg_fetch_result($resultat, 0, 1);
$_SESSION['niveau'] = pg_fetch_result($resultat, 0, 12);
$_SESSION['droit_id'] = pg_fetch_result($resultat, 0, 3);
$_SESSION['droit_fret'] = pg_fetch_result($resultat, 0, 4);
$_SESSION['droit_dosn_infra'] = pg_fetch_result($resultat, 0, 5);
$_SESSION['droit_voyage'] = pg_fetch_result($resultat, 0, 6);
$_SESSION['droit_region'] = pg_fetch_result($resultat, 0, 7);
$_SESSION['droit_reseau'] = pg_fetch_result($resultat, 0, 8);
$_SESSION['droit_autres'] = pg_fetch_result($resultat, 0, 9);
$_SESSION['droit_applications'] = pg_fetch_result($resultat, 0, 13);
$_SESSION['droit_all'] = pg_fetch_result($resultat, 0, 14);
$_SESSION['droit_gares'] = pg_fetch_result($resultat, 0, 15);
$_SESSION['droit_dsifs'] = pg_fetch_result($resultat, 0, 16);
$_SESSION['id_utilisateurs'] = pg_fetch_result($resultat, 0, 0);
$token = Securite::bytes();
$_SESSION['token'] = $token;
header("location: ./index.php");
} else
{
echo '<div class="erreur_mdp"><p class="text">L"email ou le mot de passe est incorrect.</p></div>';
}
}
}
}
我的调用函数的页面:
<?php
function autoloadClass($class)
{
require "classes/" . $class . ".php";
}
spl_autoload_register('autoloadClass');
$verifConnexion = Connexion::VerifConnexion();
// Chargement du css pour la page de connexion
echo '
<!DOCTYPE html>
<html lang="fr" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="icon" href="./images/favicon.png" />
<link rel="stylesheet" href="./css/style_connexion.css">
<title>Connexion</title>
</head>
<body>';
// Function pour afficher le formulaire de connexion
$PageConnexion = Connexion::PageConnexion();
// Vérification si les champs sont bien indiquer
if (isset($_POST['email'], $_POST['password'])) {
$ConnexionVerif = Connexion::LoginVerification(Securite::bdd($_POST['email']), Securite::bdd($_POST['password']));
} else {
echo '<div class="LoginVerification"><center>Merci de saisir vos identifiants // Version Alpha 2.0</center></div>';
}
echo '</body>
</html>';
感谢您的帮助:)
答案 0 :(得分:0)
Checkmarx中的“违反信任边界”仅表明您的代码正在将不受信任的数据(在这种情况下,是来自pg_fetch_result调用的数据)放入服务器端会话(即受信任的存储区)中。
建议先对pg_fetch_result中的输入进行验证和清理,然后再将其分配给$ _SESSION:
$_SESSION['email'] = filter_var(pg_fetch_result($resultat, 0, 10),FILTER_SANITIZE_EMAIL);