这是一个很好的消毒功能吗?

时间:2015-03-08 01:14:05

标签: php mysql pdo sanitization

只想对我以前的所有问题说,谢谢你帮我解决了一些问题。我当然是个菜鸟,但学习很关键。

我正在创建一个函数,在将输入提交到查询之前对其进行清理,以确保它是安全的。这些是我最后一个帖子中的一些问题以及一些新问题。这个问题针对那些非常善于保持投入消毒和安全的人。

这是我执行所有查询的方式。

$query = $dbh->prepare("SELECT * FROM table WHERE data = ?");
$query ->execute(array($data));

主要是“插入”查询或任何其他类型的查询,我这样做。

$query = $dbh->prepare("INSERT INTO table ( data ) VALUES ( :data )";
$query ->execute(array(':data'=>$data));

我通常将此方法用于需要插入大量数据的查询。我的问题是,这两种方式都有效吗?我没有绑定任何东西,因为我有这个消毒功能。

function sanitize($type, $input) { 
if ($type == "email") { $input = filter_var($input, FILTER_SANITIZE_EMAIL); }
if ($type == "int") { $input = filter_var($input, FILTER_SANITIZE_NUMBER_INT); }
if ($type == "float") { $input = filter_var($input, FILTER_SANITIZE_NUMBER_FLOAT); }
if ($type == "string") {
    $input = filter_var($input, FILTER_SANITIZE_STRING);    
    //$input = filter_var($input, FILTER_SANITIZE_ENCODED); 
    $input = filter_var($input, FILTER_SANITIZE_MAGIC_QUOTES);
    $input = filter_var($input, FILTER_SANITIZE_SPECIAL_CHARS); 
    $input = filter_var($input, FILTER_SANITIZE_STRIPPED);
    //$input = filter_var($input, FILTER_SANITIZE_URL); 
}
return $input;

}

我的问题是,这是使用此清理功能的最佳方式吗?有没有更好的方法来解决这个问题?就像我说的那样,安全性是我制作项目的最大问题,我不想冒任何不好的风险,所以在继续我正在进行的项目之前,我宁愿优化安全性。

我最后的问题是,做CSRF令牌的最佳方式是什么?我尝试了一个脚本,我相信OWASP,但我的一些朋友声称它有一些漏洞,所以我不想使用它。再次感谢:)

1 个答案:

答案 0 :(得分:0)

  

我的问题是,这是使用此清理功能的最佳方法吗?

这是进行消毒的好方法。所有消毒方法都会随着时间的推移而改善。

  

有没有更好的方法来解决这个问题?

如果它是为您提供用户输入的Web应用程序,您可能希望在UI上引导用户满足您的期望(例如(输入公寓号,如果适用。否则,请将其留空))。

JavaScript可用于强制执行某些行为。

当数据到达您的PHP脚本时,在卫生过程之外还会分析数据是否在X和Y之间。例如,如果客户进入年龄,请检查年龄是否有效。

如果是字符串,并且您不希望有任何攻击性标记,请使用strip_tags删除它们。执行某些字符的编码/解码/转义 - 考虑使用mysqli_real_escape_stringhtmlspecialchars

此外,如果一次运行多个insert语句,请使用存储的例程。无论例程如何,都使用事务。回滚除非所有交易都按您的要求完成。

不使用select * from ...,而是选择所需的列。如果存在覆盖指数,某些结果(仅需要2-3列)可能会显着加快。

如果您的应用使用systemexec等,则使用escapeshellargs / escapeshellcmd将非常有用。

在UI上显示信息时,请确保使用htmlspecialchars显示相关字段,以减少/消除XSS的可能性。另外,请考虑在必要时使用urlencode / json_encode

看看http://www.wikihow.com/Prevent-Cross-Site-Request-Forgery-%28CSRF%29-Attacks-in-PHP,通过示例展示防止CSRF攻击的方法。

对你的问题的评论都是你应该考虑的好想法,而且重要的是 - 你已经朝着正确的方向迈出了一步 - 对你有好处!