Formulaire d'inscription du nom de l'entreprise
<p>Pour référence uniquement, nouveau venu dans le codage, l'auto-apprentissage, détendez-vous...</p>
<p>J'ai un formulaire d'inscription qui crée une nouvelle table SQL. Le nom de l'entreprise qu'ils saisiront sera le nom de la nouvelle table créée à chaque connexion. </p>
<p>Tout fonctionne correctement, à l'exception de la vulnérabilité dans la variable de nom de table. </p>
<p>J'utilise PHP et MySQL. </p>
<p>Au début, j'ai eu des problèmes si le nom de l'entreprise avait un espace entre les 2 mots, mais j'ai résolu ce problème en utilisant str_replace</p>
<p>J'ai fait beaucoup de tests et j'ai découvert que si je mets le nom de l'entreprise dans "out", cela casse le code. </p>
<p>J'ai reçu ce message d'erreur : </p>
<p>"Erreur fatale : mysqli_sql_exception non interceptée : il y a une erreur dans votre syntaxe SQL ; consultez le manuel de la version de votre serveur MySQL pour connaître la syntaxe correcte à utiliser près de 'out (id INT UNSIGNED AUTO_INCRMENT PRIMARY KEY, first_name VARCHAR(128 ) NOT ' Trace de pile à la ligne 1 dans C:Usersreece.groverOneDriveXML Websiteopregister.php:73 : #0 C:Usersreece.groverOneDriveXML Websiteopregister.php(73) : mysqli->query('CREATE TABLE ou ...') #1 {main} lance "</p> dans C:Usersreece.groverOneDriveXML Websiteopregister.php à la ligne 73
<p>Cela semble conduire non seulement à des erreurs, mais également à une injection SQL. </p>
<p>J'ai appris à bind_param, mais cela empêche toujours une éventuelle rupture de code avec la fonction CREATE TABLE. </p>
<p> Ceci est mon code PHP côté serveur, le formulaire est juste un simple formulaire HTML avec Bootstrap.</p>
<pre class="brush:php;toolbar:false;">//supprimer les espaces
$entreprise = str_replace(' ', '', $_POST["entreprise"]);
//hachage du mot de passe
$password_hash = password_hash($_POST["mot de passe"], PASSWORD_DEFAULT);
// Créer un nouvel opérateur
$mysql = nécessite __DIR__ . "/database.php";
$sql = "Opérateurs INSERT INTO (prénom, nom, email, hash_mot de passe, société)
VALEURS (?, ?, ?, ?, ?)" ;
$stmt = $mysql->stmt_init();
if ( ! $stmt ->prepare($sql)){
die("Erreur SQL : " . $mysql->erreur);
}
$stmt->bind_param("sssss",
$_POST["prénom"],
$_POST["nom_dernier"],
$_POST["e-mail"],
$password_hash,
$entreprise);
if ( ! $stmt->execute()) {
die($mysqli->error . " " . $mysqli->errno);
}
//Créer la nouvelle table société
$sql = "CREATE TABLE $entreprise (
id INT CLÉ PRIMAIRE AUTO_INCREMENT NON SIGNÉE,
prénom VARCHAR(128) NON NULL,
nom_VARCHAR(128) NON NULL,
email VARCHAR(255) NON NULL UNIQUE,
la société VARCHAR(128),
crédit VARCHAR(60),
téléphone VARCHAR(60))" ;
if ( ! $mysql->query($sql)) {
die("Échec de la création de la table : " . $mysql->erreur);
}
$sql = "INSERT INTO $company (prénom, nom, email, société, crédit, téléphone)
VALEURS (?, ?, ?, ?, ?, ?)" ;
$stmt = $mysql->stmt_init();
if ( ! $stmt ->prepare($sql)){
die("Erreur SQL : " . $mysql->erreur);
}
$stmt->bind_param("ssssss",
$_POST["prénom"],
$_POST["nom_dernier"],
$_POST["e-mail"],
$entreprise,
$_POST["crédit"],
$_POST["téléphone"]);
if ($stmt->execute()) {
header("Emplacement : signup_success.php");
quitter;</pre></p>