【发布时间】:2017-04-07 20:55:02
【问题描述】:
我是 PHP 安全新手,正在尝试实施 PDO 以外的解决方案。
我在这里阅读了几篇关于 stackoverflow 的文章,并在 Google 上搜索了许多文章。
我尝试编写自己的代码来保护用户输入。
如果我在这里留下任何东西或者我在这里使用了任何不必要的东西,我会请这里的专家看看并指导我。
我也错过了 CSRF 预防。除了随机令牌生成之外还有什么别的吗?这可以使用任何函数来实现吗?
extract($_POST);
$stuid = filter_input(INPUT_GET, 'stud_id', FILTER_SANITIZE_SPECIAL_CHARS); //php filter extension
$stuid = trim($stuid);
$stuid = strip_tags($stuid);
$stuid = iconv('UTF-8', 'UTF-8//IGNORE', $stuid); //remove invalid characters.
$stuid = htmlspecialchars($stuid, ENT_COMPAT, 'UTF-8'); // manual escaping
$stuid = mysql_real_escape_string($stuid);
$stuid = htmlspecialchars($stuid, ENT_COMPAT, 'UTF-8'); //Cross site scripting (XSS)
$email = filter_input(INPUT_POST, $email, FILTER_SANITIZE_EMAIL);
$pass=md5($pass);
提前致谢。
【问题讨论】:
-
“除了 PDO”...我想你的意思是除了 mysqli 之外。你真的不应该推出自己的安全性。会出问题的。
-
这段代码实际上并没有做任何事情,那么你要保护什么?没有单行“安全代码”可以使应用程序安全。您必须了解应用程序正在做什么以及可以利用它的方式。此应用程序不执行任何操作。
-
$pass=md5($pass);是否对密码进行哈希处理?如果是这样,请改用password_hash()- php.net/manual/en/function.password-hash.php -
就我而言,将 POST 提取到变量中并不是一种安全的做法。将它们留在 POST 中,直到您将它们取出并保护它们以供使用。如果您对此感兴趣,我将通过示例提出解决方案。
-
@Gerrit0 我将使用 mysqli 来触发参数化查询。