2016-10-08 2 views
1

Я хочу защитить некоторый контент на своем сайте паролем, и я думаю об использовании этого сценария php.Является ли этот php-скрипт безопасным для использования на моем сайте?

Как вы думаете, это хороший способ пойти?

Вы знаете что-то лучшее для этой задачи или способ улучшить (при необходимости) тонкий?

Код для загрузки содержимого из базы данных:

<?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

Вы хотите сделать это на уровне PHP? Вы можете сделать это с помощью htaccess довольно легко (при использовании apache). https://davidwalsh.name/password-protect-directory-using-htaccess Я не создаю учетную запись на этом сайте, чтобы увидеть, что такое код, если он использует 'mysql_ *' функции, которые не являются безопасными. Если передача данных пользователя напрямую в запрос, это не безопасно. Однако есть много способов сделать доступ запрещенным. – chris85

+1

Итак, вы хотите, чтобы мы загрузили этот пакет, чтобы увидеть, что в нем, и запустить его? Я для одного не буду этого делать; вставьте свой код в вопрос. –

+0

Привет, хранилище кода в базе данных id, содержание html и пароль, проблема, которую я вижу, я новичок в php и базе данных, является скриптом, хранящим пароль как обычный текст в базе данных. – Alexis

ответ

3

Как я уже говорил в комментариях, вы не должны тратить больше времени с тем, что вы загрузили, так как это старый и не безопасно.

Возможно, вы сохраняете пароли в виде простого текста, что определенно не очень хорошая идея.

  • Пришло время перейти в XXI век.

API mysql_ устарел и полностью удален из PHP 7.0.

Лучше всего использовать подготовленный отчет и password_hash() или compatibility pack.

Вот несколько ссылок:

нотабене Использование mysql_real_escape_string() не полностью гарантирует защиту от возможной инъекции SQL.

Consult следующего Q & А по теме:

Вот кусок кода, вытащили из одного или ircmaxell's ответов, которые используют (PDO), полученное заявление и password_hash().

Вытащил из: https://stackoverflow.com/a/29778421/1415724

Просто используйте библиотеку. Шутки в сторону. Они существуют по какой-то причине.

  • PHP 5.5+: использовать password_hash()
  • PHP 5.3.7+: использовать password-compat (пакет обеспечения совместимости для выше)
  • Все остальные: использовать phpass

Не делайте это сами , Если вы создаете свою соль, ВЫ МОЖЕТЕ НЕПРАВИЛЬНО. Вы должны использовать библиотеку, которая обрабатывает это для вас.

$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]); 

А на входе:

$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

почему это было опущено? Я не вижу здесь смысла. Я не буду его удалять. До тех пор, пока вы не сможете объяснить, почему вы это сделали. –

+0

ясно, что downvoter не хочет ничего говорить и нуждается в резервном копировании с комментарием об этом, потому что ответ «отвечает» на вопрос. Если вы не собираетесь беспокоиться, тогда опубликуйте свой собственный ответ. –

+1

Здесь я буду притворяться иллюзионистом: * Я ревную к твоему серому веществу между твоими ушами. Почему я родился с моей неумелой? *. Хорошо, делаю притворство: http://i.imgur.com/qF8BKHm.jpg – Drew

 Смежные вопросы

  • Нет связанных вопросов^_^