2016-10-08 1 views
1

Je veux protéger un peu du contenu de mon site avec un mot de passe et je pense à utiliser ce script php.Ce script php est-il sécurisé pour utiliser sur mon site?

Pensez-vous que c'est un bon moyen de partir?

Savez-vous quelque chose de mieux pour cette tâche ou un moyen d'améliorer (si nécessaire) mince?

Le code pour charger le contenu de la base de données est:

<?php 


error_reporting(0); 
include("config.php"); 


if (!isset($_REQUEST["p"])) { 

    echo 'document.write("<div id=\"protected_'.intval($_REQUEST["id"]).'\">");'; 
    echo 'document.write("<form onsubmit=\'return LoadContent(\"'.intval($_REQUEST["id"]).'\",\"protected_'.intval($_REQUEST["id"]).'\",document.getElementById(\"pass_'.intval($_REQUEST["id"]).'\").value); return false;\'\"><input type=\'password\' size=\'30\' placeholder=\'Content is protected! Enter password.\' id=\"pass_'.intval($_REQUEST["id"]).'\"></form>");'; 
    echo 'document.write("</div>");'; 

} else { 

    $sql = "SELECT * FROM ".$SETTINGS["data_table"]." WHERE `id`='".intval($_REQUEST["id"])."' AND password='".mysql_real_escape_string($_REQUEST["p"])."'"; 
    $sql_result = mysql_query ($sql, $connection) or die ('request "Could not execute SQL query" '.$sql); 

    if (mysql_num_rows($sql_result)==1) { 
     $row = mysql_fetch_assoc($sql_result); 
     echo $row["content"]; 
    } else { 
     echo 'Wrong password'; 
    } 

} 

?> 
+0

Vous voulez le faire au niveau de PHP? Vous pouvez le faire avec htaccess assez facilement (si vous utilisez Apache). https://davidwalsh.name/password-protect-directory-using-htaccess Je ne crée pas de compte sur ce site pour voir ce que le code est, s'il utilise les fonctions mysql_ * ', il n'est pas sécurisé. S'il transmet des données utilisateur directement à une requête, il n'est pas sécurisé. Il y a plusieurs façons de refuser l'accès. – chris85

+1

Donc vous voulez que nous téléchargeons ce paquet pour voir ce qu'il contient et l'exécuter? Pour ma part, je ne le ferai pas; Collez votre code dans la question. –

+0

Salut, le magasin de code dans une base de données un ID, le contenu html et le mot de passe, le problème que je vois, je suis un débutant en php et base de données, est le script stocker le mot de passe en tant que texte dans la base de données – Alexis

Répondre

3

Comme je l'ai dit dans les commentaires, vous ne devriez pas passer plus de temps avec ce que vous avez téléchargé depuis il est vieux et pas en sécurité.

Vous pouvez enregistrer des mots de passe en texte brut, ce qui n'est certainement pas une bonne idée.

  • Il est temps d'entrer dans le 21ème siècle.

L'API mysql_ est obsolète et a été entièrement supprimée de PHP 7.0. Il est préférable d'utiliser une instruction préparée et password_hash() ou compatibility pack.

Voici quelques références:

N.B. L'utilisation de mysql_real_escape_string() ne garantit pas entièrement la protection contre une éventuelle injection SQL.

Consulter le Q suivant & A sur le sujet:

Voici un morceau de code tiré d'un ou ircmaxell's réponses qui utilise une instruction préparée (AOP) et password_hash().

tiré de: https://stackoverflow.com/a/29778421/1415724

Il suffit d'utiliser une bibliothèque. Sérieusement. Ils existent pour une raison.

Ne pas le faire vous-même . Si vous créez votre propre sel, vous le faites mal. Vous devriez utiliser une bibliothèque qui gère cela pour vous.

$dbh = new PDO(...); 

$username = $_POST["username"]; 
$email = $_POST["email"]; 
$password = $_POST["password"]; 
$hash = password_hash($password, PASSWORD_DEFAULT); 

$stmt = $dbh->prepare("insert into users set username=?, email=?, password=?"); 
$stmt->execute([$username, $email, $hash]); 

Et connexion:

$sql = "SELECT * FROM users WHERE username = ?"; 
$stmt = $dbh->prepare($sql); 
$result = $stmt->execute([$_POST['username']]); 
$users = $result->fetchAll(); 
if (isset($users[0]) { 
    if (password_verify($_POST['password'], $users[0]->password) { 
     // valid login 
    } else { 
     // invalid password 
    } 
} else { 
    // invalid username 
} 
+0

pourquoi était-ce downvoted? Je ne vois pas le point ici. Je ne vais pas le supprimer non plus. Jusqu'à ce que vous le downvoter puisse expliquer pourquoi vous l'avez fait. –

+0

clairement le downvoter ne veut rien dire et doit le sauvegarder avec un commentaire à ce sujet parce que la réponse "répond" à la question. Si vous n'allez pas déranger, postez votre propre réponse. –

+1

Ici, je vais prétendre être le downvoter: * Je suis jaloux de votre matière grise entre vos oreilles. Pourquoi suis-je né avec mon inepte? Ok, fait semblant: http://i.imgur.com/qF8BKHm.jpg – Drew