信任边界违反php

时间:2019-06-12 13:26:42

标签: php

我用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>';

感谢您的帮助:)

1 个答案:

答案 0 :(得分:0)

Checkmarx中的“违反信任边界”仅表明您的代码正在将不受信任的数据(在这种情况下,是来自pg_fetch_result调用的数据)放入服务器端会话(即受信任的存储区)中。

建议先对pg_fetch_result中的输入进行验证和清理,然后再将其分配给$ _SESSION:

$_SESSION['email'] = filter_var(pg_fetch_result($resultat, 0, 10),FILTER_SANITIZE_EMAIL);