nameIn долгое время пользователь MySQL, который недавно решил перейти на PHP 5.5 и создать новый веб-сайт на основе PDO. Поскольку я очень забочусь о безопасности с помощью инъекций и не имея mysql_real_escape для моей разработки PDO, я в основном задаюсь вопросом, безопасен ли мой код?Является ли мой код PHP безопасным
Вот мой тестовый сценарий, спасибо!
<?php
try {
$DB = new PDO("mysql:host=localhost;dbname=dbtest", "dbtest", "TbhPXM!Wv9sz");
$DB->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "<div style='text-align: center; margin-top: 100px; font-size: 21px; font-weight: bold;'>Damn, your experiencing technical issues with our website. An administrator has been notified and will address the issue shortly.<br /><br />T_T</div>";
file_put_contents('error.txt', $e->getMessage()."\n", FILE_APPEND);
}
if (isset($_POST['RegUser']) && isset($_POST['Username']) && isset($_POST['Password'])) {
try {
$stmt = $DB->prepare("INSERT INTO users (name, pass) VALUES (:name, :pass)");
$stmt->bindParam(':name', $name);
$stmt->bindParam(':pass', $pass);
$name = $_POST['Username'];
$options = ['cost' => 12,'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM),];
$pass = password_hash($_POST['Password'], PASSWORD_BCRYPT, $options)."\n";
$stmt->execute();
}
catch(PDOException $e) {
echo "Registration Failed, Try another username.";
}
}
if (isset($_POST['Login']) && isset($_POST['Username']) && isset($_POST['Password'])) {
$name = $_POST['Username'];
$STH = $DB->prepare('SELECT name, pass from users where name=:name LIMIT 0,1');
$STH->bindParam(':name', $name);
$STH->execute();
$STH->setFetchMode(PDO::FETCH_ASSOC);
if ($STH->rowCount() == 1) {
while($row = $STH->fetch()) {
$hash = $row['pass'];
if (password_verify($_POST['Password'], $hash)) {
echo 'Password is valid!';
session_start();
$_SESSION['logged'] = true;
$_SESSION['name'] = $row['name'];
$_SESSION['pass'] = $row['pass'];
} else {
echo 'Invalid password.';
}
}
} else {
echo "User Not Found!";
}
}
?>
<form action="index.php" method="post" target="_self" enctype="multipart/form-data">
<input type="text" placeholder="Username" size="40" name="Username" /><br />
<input type="text" placeholder="Password" size="40" name="Password" /><br />
<input type="submit" value="Register" name="RegUser" />
</form><br />
<form action="index.php" method="post" target="_self" enctype="multipart/form-data">
<input type="text" placeholder="Username" size="40" name="Username" /><br />
<input type="text" placeholder="Password" size="40" name="Password" /><br />
<input type="submit" value="Login" name="Login" />
</form>
<?php
if (isset($_SESSION)) {
var_dump($_SESSION);
}
if (isset($_SESSION['logged']) && $_SESSION['logged'] == true) {
echo "Hey ".$_SESSION['name'].", Welcome back!";
}
$DB = null;
Я думаю, что этот вопрос более подходит для http://codereview.stackexchange.com/ – piddl0r
, это хорошо, что касается PDO, вам не нужно 'mysql_real_escape_string'. Подготовленные утверждения, подобные тем, которые вы используете, предотвращают внедрение SQL. В противном случае код выглядит хорошо для меня – Novocaine
Отправьте несколько простых javascript, сохраните их в своем db, извлеките и отобразите на своей веб-странице. Посмотрите, как это выполняется. –