正确有效的PHP表单处理

时间:2017-01-18 18:22:29

标签: php mysql security prepared-statement

下午好。

我是PHP编程的初学者,接受过一些课程并掌握了理论知识。我现在已经被录用并获得一些基本的'任务。这里的同事告诉我,现实世界'代码与大学,书籍等中的代码略有不同。我一直在阅读有关安全性的文章,并了解了SQL注入问题。我还了解到,避免使用它们的最佳方法是使用预处理语句和参数绑定。

所以,如果您能就以下代码向我提出您的意见或建议,我将非常感激。请你说的任何话都非常有用。关于代码逻辑,结构,性能,安全性......任何事情的意见。

if (isset($_POST['username']) && isset($_POST['password']))
{
    $dbaddress = 'myhost';
    $dbuname = "database_user";
    $dbpass = "database_password";
    $dbname = 'customers_db';

    $r = new mysqli($dbaddress, $dbuname, $dbpass, $dbname);

    $q = $r->prepare("SELECT * FROM users WHERE uAccessName = ? AND uAccessPass = ?");
    $q->bind_param("ss", $user, $pass);

    $user = $_POST['username'];
    $pass = $_POST['password'];
    $q->execute();
    $q->store_result();

    if ($q->num_rows === 1)
        // Do many many other things here
        echo "<h1>Access granted</h1>";
    else
        echo "<h1>Access denied</h1>";

    $q->close();
    $r->close();
} else {
    // Handle the case where the form sent no data
}

非常感谢。

2 个答案:

答案 0 :(得分:-1)

请参阅此链接,这是关于在php中提供安全性的讨论

How secure is my PHP login system?

PHP Session Security

making php web application secure

答案 1 :(得分:-1)

不要以纯文本格式存储数据库密码。使用双向加密算法,以便您可以以加密形式存储数据库密码,但仍可以在数据库查询中使用它

还使用filter_var或类似的Php函数清理POST变量。