javascript - 在 javascript 中管理 secret 信息

标签 javascript php mysql security hash

我的 php 中有一个表,显示了我数据库中一个表的数据:用户名、电子邮件等,我还添加了一个删除选项。删除选项正常工作,并且在删除之前还会显示一条确认消息,其中包含必要的密码。

我将密码保存在数据库的表中但未加密。

问题在于,如果用户浏览页面内容,他们可以看到密码是什么,因此任何人都可以从数据库中删除数据。因此,或多或少熟练的用户可以轻松浏览该内容。

我该怎么做才能防止这种情况发生?我应该在另一个脚本中复制相同的 JavaScript 代码并将其从 index.php 中删除吗?为了更加安全,我尝试在同一 index.php 页面上使用哈希,但您也可以看到密码是什么。

这是我的代码:

索引.php

<table id="professorsRegistered" border="1px">
    <tr>
        <th colspan="3"><h2>Users</h2></th>
    </tr>
    <tr>
        <th> Name </th>
        <th> Email </th>
        <th> Delete </th>
    </tr>

<?php
$sql = "SELECT * FROM users"; /*Select from table name: users*/
$result = $conn->query($sql); /*Check connection*/

if ($result->num_rows==0){

    echo "No users";
}else{
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>".$row["username"]."</td><td>".$row["email"]."</td><td><a class='eliminate' onClick=\"getPass(".$row['id'].");\">X</a></td></tr>";
    }
}

?>
</table>


<?php
        $sql = "SELECT password FROM passwords WHERE passwords_id = '1';"; /*Select from table name: passwords*/
        $result = $conn->query($sql); /*Check connection*/
        $row = $result->fetch_assoc();
        $password = $row["password"];
        $hash = sha1($password);
        /*echo "<p>".$hash."</p>";*/
        ?>


<script type = "text/javascript">
    function getPass(user) {
        var securePass = "<?php echo $password ?>";
        var pass = prompt("Introduce password to delete: ", "Password");
        if (pass!=securePass) {
            return confirm('Incorrect Password');
        }
        else if (pass==securePass) {
            window.location='delete.php?id='+user;
        }
    }
</script>

删除.php

<?php
include('Conexion.php'); // Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

$id = $_GET['id']; // $id is defined

mysqli_query($conn,"DELETE FROM users WHERE id='".$id."'");
mysqli_close($conn);
header("Location: index.php");
?>

最佳答案

为了使这更安全,您应该考虑执行以下操作:

  1. 确保凭据在服务器端代码 (PHP) 中进行验证,而不是在客户端代码中进行验证。由于恶意用户可以很容易地编辑 JavaScript 或直接将数据发布到您的服务器并完全绕过您的代码。

  2. 应使用适当的密码哈希算法对密码进行哈希处理。 SHA1 不是一个好的密码散列算法,因为它太快了,这使得暴力和字典攻击更容易。更好的选择是像 bcrypt 或 pbkdf2 这样的东西,它们要慢得多,使上述攻击更加困难。你还应该加盐你的密码。这意味着在对密码进行哈希处理之前,只需在密码中添加一些随机性。这将有助于防止称为彩虹表攻击的攻击,在这种攻击中,攻击者使用一组预哈希值和相应的纯文本来加速暴力破解过程。

  3. 不要通过字符串联系构建 SQL 查询字符串,因为这会使您的应用程序容易受到 SQL 注入(inject)攻击。如果恶意用户发送 1' OR 1=1 -- 作为 id 参数,那么所有用户都将被删除,这种技术也可以用于从数据库中转储所有数据,甚至完全删除数据库。改用参数化查询。

幸运的是,已经有大量关于如何正确执行此操作的信息。我建议您查看 OWASP 网站,其中有大量示例。

关于javascript - 在 javascript 中管理 secret 信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55638692/

相关文章:

php - 使用 $_GET ['ID' 根据主键值在 PHP 中检索特定 MySQL 字段数据]

MYSQL加入更新内部步骤

javascript - 使用 Javascript 检查日期是否为给定格式

javascript - 如何将 .innerHTML 转换为 PHP 变量

php - SEO 和异步页面加载

php - 使用 CodeIgniter 将数据库结果中的字符串替换为另一个字符串

mysql - 更新sphinx索引属性后如何更新mysql

Mysql Sum 不适用于单行结果

javascript - 检查按钮点击事件并做一些事情,如果用户点击其他地方则删除它们

php - 跨域 JSON/PHP