我写了这篇文章,并想得到每个人的意见。当我期待FORM提交的变量时,我会使用它。即:
<form method="post" action="index.php">
Username: <input type="text" name="username">
</form>
$username = get_request('username');
function get_request($name) {
if(isset($_REQUEST[$name])) {
//return mysql_real_escape_string(htmlentities($_REQUEST[$name]));
return mysql_real_escape_string($_REQUEST[$name]);
} else {
return "";
}
}
答案 0 :(得分:1)
很好,但如果$ _REQUEST失败,您是否应该返回错误而不是空字符串?不然好!
答案 1 :(得分:1)
虽然mysql_real_escape_string()做得很好,但您可能希望对返回的内容更加严格。例如。如果你只需要字母数字字符,它会更安全(也可能更快):
return preg_replace('/[^a-z0-9]/', '', $_REQUEST[$name]);
如果您运行的是PHP 5.2 +,甚至可以使用filter_var。
同样如上所述,如果您只处理POST数据,则可以轻松使用$ _POST而不是$ _REQUEST。
除此之外,保持良好的工作! :)
答案 2 :(得分:1)
它看起来没问题,但它不会帮助您防止某些SQL注入。您应该在函数中添加另一个参数,根据类型清理输入,例如确保返回的是整数或浮点数。
例如,如果您有一个带有查询SELECT * FROM tbl LIMIT 10, $page
的分页机制。如果$page
= like 1; DROP TABLE tbl --
并通过您的函数get_request()
发送,那么它对您没有任何帮助。
另一件事是,如果它不存在,你应该只返回null而不是空字符串(""
)。
例如,如果您有变量$x = ""
,则isset($x)
将返回true
,而$x = null
将返回false。
正如其他人指出的那样,您应该区分GET
和POST
。