【问题标题】:Having weird trouble using a PHP post function使用 PHP post 函数时遇到奇怪的问题
【发布时间】:2013-05-14 09:21:18
【问题描述】:

所以,我有一些非常基本的代码,我无法完全正确地工作。我正在使用 ezSQL 类 (http://justinvincent.com/ezsql),但它工作正常。一切正常,除非我尝试使用清理功能(get_post)。当我调用函数 get_post 时,我正在使用另外两个函数 sanitizeString 和 sanitizeMySQL。如果我只是 $_POST 数据到 SQL 表,它工作正常。只有当我通过 post 功能时,它才会中断。以下是发帖:

if (isset($_POST['username']) &&
isset($_POST['password']))
{
    $username = get_post('username');
    $password = get_post('password');
    $db->query("INSERT INTO users VALUES ('$username', '$password')");
}

就像我说的,我正在使用一个类(这就是 $db->query 的内容),但它工作得很好。如果我将代码更改为:

if (isset($_POST['username']) &&
isset($_POST['password']))
{
    $username = $_POST['username'];
    $password = $_POST['password'];
    $db->query("INSERT INTO users VALUES ('$username', '$password')");
}

它工作正常。以下是我用于消毒的三个功能:

 // Sanitize Functions
function sanitizeString($var)
{
 if (get_magic_quotes_gpc()) $var = stripslashes($var);
 $var = htmlentities($var);
 $var = strip_tags($var);
 return $var;
}    

function sanitizeMySQL($var)
{
 $var = mysql_real_escape_string($var);
 $var = sanitizeString($var);
 return $var;
}    

function get_post($var) 
{
return sanitizeMySQL($_POST['$var']);
}

我什至尝试将 get_post 函数更改为包含 mysql_real_escape_string 返回,但即使这样也不起作用。另外,我想我应该澄清当我尝试使用 get_post 函数时实际发生的情况。它似乎在表中创建了一个新行,但单元格完全为空。希望你们能阐明我做错了什么!我是一个非常有经验的前端开发人员,但我有点学习服务器端的东西。谢谢:)

ninjaEdit:我发现了这个问题Are these two functions overkill for sanitization?,这绝对有助于使我的清理功能更好,但它并不能真正帮助我解决为什么我的问题一开始就不起作用。

【问题讨论】:

  • sanitizeMySQL 应该是 if (get_magic_quotes_gpc()) $var = stripslashes($var); 然后 $var=mysql_real_escape_string($var);。你弄乱了 mysql 编码的字符串,所以它不再正确转义
  • 你考虑过使用pdo和prepared statements吗?如果您使用此引擎,则无需关心在绑定参数时转义 PDO 会为您完成。
  • 我开始使用 PDO 并准备好语句。感谢您的建议!仍然不确定我是否需要清理更多内容,而不仅仅是使用绑定参数

标签: php mysql post sanitize


【解决方案1】:

你为什么在$var 周围加上'?

在函数 get_post 你应该做return sanitizeMySQL($_POST[$var]);

您应该使用准备好的语句,以便为您转义字符

【讨论】:

  • 谢谢 :) 我现在正在使用准备好的语句
【解决方案2】:

mysql_real_escape_string() 应该是您做的最后一件事,以使字符串准备好供数据库使用。 在 mysql_real_escape_string 之后使用转义字符串可能会使该字符串对查询无用

// Sanitize Functions
function sanitizeString($var)
{
    if (get_magic_quotes_gpc()) $var = stripslashes($var);
    $var = htmlentities($var);
    $var = strip_tags($var);
    return $var;
}    

function sanitizeMySQL($var)
{
    $var = sanitizeString($var);
    $var = mysql_real_escape_string($var);
    return $var;
}    

function get_post($var) 
{
    return sanitizeMySQL($_POST[$var]);
}

附言 如果你传递变量而不是帖子索引的名称,get_post() 会更好写。

function get_var($var) 
{
    return sanitizeMySQL($var);
}

get_var($_POST['message']); 
get_var($_POST['message'][0]); // array elements on the form 
get_var($_GET['index']);  // GET parameter
get_var($_FILES['file']['name']);  // original name of uploaded file

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2023-03-04
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多