处理邮寄请求
问题描述:
我写了这个,并希望得到每个人的意见。当我期待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 "";
}
}
答
尽管mysql_real_escape_string()做得很好,但您可能希望对返回的内容进行更严格的规定。例如。如果你只需要字母数字字符,这将是安全的(且可能更快)做的事:
return preg_replace('/[^a-z0-9]/', '', $_REQUEST[$name]);
甚至使用filter_var如果正在运行PHP 5.2 +。
同样如上所述,如果您只处理POST数据,您可以轻松使用$ _POST而不是$ _REQUEST。
除此之外,保持良好的工作! :)
答
不错,但你不应该想如果$ _REQUEST失败,而不是返回一个空字符串的错误?否则好!
答
它看起来不错,除了它不会帮助你对某些SQL注入。你应该为你的函数添加另一个参数,根据类型来清理输入,例如确保你的返回是一个整数或浮点数。
例如,如果您有一个分页机制,查询SELECT * FROM tbl LIMIT 10, $page
。如果$page
= like 1; DROP TABLE tbl --
它通过你的功能get_request()
发送,它不会帮你任何一点。
另一件事是你应该返回null而不是空字符串(""
)如果它不存在。
如果例如有一个变量$x = ""
,然后isset($x)
将返回true
,而它会返回false与$x = null
。
正如其他人指出的,您应该区分GET
和POST
。
如果您希望将数据作为POST变量传递,则可以使用$ _POST数组。 – Yaniro 2011-12-30 21:00:08
看起来不错。 – 2011-12-30 21:00:54
我建议使用'$ _POST'或'$ _GET'而不是'$ _REQUEST'。 – 2011-12-30 21:07:20