在阅读了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的预备语句,虽然我需要更多地阅读它们以完全理解它如何防止注入。
感谢您的时间。
答案 0 :(得分:6)
再一次,没有通用的逃避功能只是神奇地使事情变得“安全”。
请参阅:https://stackoverflow.com/a/7810880/362536
不同的转义方法用于不同的事情。您不能通过一堆应该在特定上下文中使用的函数来运行一堆数据。您正在创建垃圾数据,并且不会比您最初使用原始用户数据更安全。
答案 1 :(得分:2)
没有
对于SQL注入预防,您确实希望使用prepared statements。这是一种更安全的方法,而不是转义引号。您还希望使用htmlspecialchars()来转义HTML标记,而不是仅仅剥离它们,但这取决于您。
答案 2 :(得分:1)
这是一个永恒的问题,答案因所需用法而异:对于准备好的查询,我相信使用自己的变量系统并让它处理输入是100%安全的。对于HTML输出,剥离标签可能并不总是您想要的;此外,在黑名单中输入允许输入内容的白名单比黑名单更安全,因为你知道,黑客有幻想。对于URL输出,您的解决方案应该没问题,但请注意,其他一些平台可能会执行一些不同的URL编码(请参阅由Java标准库和iOS / Mac库编码的字符串URL之间的区别,即)。