【发布时间】:2012-06-15 18:14:08
【问题描述】:
阅读 PHP 安全性后,我感觉我编写的任何代码总是不安全的。因此,为了解决用户输入的安全问题,我创建了一个函数,允许我在任何使用情况下转义和删除用户输入。
我只是想知道这实际上是否安全,以及是否可以使其更安全。这还能防止什么样的攻击?从我可以通过使用 _GET 告诉 XSS 的情况来看,HTML 输入和 MYSQL 注入会被阻止?
function _INPUT($name,$tag,$sql,$url)
{
if ($_SERVER['REQUEST_METHOD'] == 'GET')
$filter = ($_GET[$name]);//Assign GET to filter variable
if ($tag == true)//Remove all HTML, PHP and JAVASCRIPT tags
{
$filter = strip_tags($filter);
}
if ($sql == true)//If MYSQL escaping is enabled
{
$filter = mysql_real_escape_string($filter);
}
if ($url == true)//If URL encoding is enabled
{
$filter = urlencode($filter);
}
return $filter;
}
$output = _INPUT('name',true,true,true);
我也会为 MYSQL 使用准备好的语句,尽管我需要更多地阅读它们以完全了解它如何防止注入。
感谢您的宝贵时间。
【问题讨论】:
-
如果您担心安全性,您不应该在 php 中使用 mysql_* 函数,您应该使用 mysqli_* 函数。
-
另外,如果您想 100% 停止 SQL 注入,请查看准备好的语句。 php.net/manual/en/mysqli.prepare.php
-
就像 Frank_Hemsowrth 所说的,完全摆脱所有 mysql_* 函数。将它们视为已弃用的函数,如下所述:news.php.net/php.internals/53799 一定要查看准备好的语句......而且可能值得您花时间研究 PDO 作为您的连接“代理”......将使您的生活更轻松长期...
-
使用 mysqli 或 PDO 没有内在的安全优势。他们只是更方便。更方便确保物品安全。这是一个很好的副作用,而不是功能。
-
strip_tags() 仅在您注入打开的 html 上下文时对 xss 攻击有用。为了防止 html 文档的其他区域出现 xss,您需要进行非常不同的编码。请阅读owasp.org/index.php/…
标签: php mysql security input escaping