转义PHP GET和POST值
可能重复:转义PHP GET和POST值,php,security,post,get,Php,Security,Post,Get,可能重复: 在另一个线程中,我被告知这段代码非常无用: function getPost($s) { if (array_key_exists($s, $_POST)) return mysql_real_escape_string(htmlspecialchars($_POST[$s])); else return false; } function getGet($s) { if (array_ke
在另一个线程中,我被告知这段代码非常无用:
function getPost($s) {
if (array_key_exists($s, $_POST))
return mysql_real_escape_string(htmlspecialchars($_POST[$s]));
else return false;
}
function getGet($s) {
if (array_key_exists($s, $_GET))
return mysql_real_escape_string(htmlspecialchars($_GET[$s]));
else return false;
}
有人能帮我理解为什么我能做得更好吗?也欢迎链接或参考
只是一直在努力提高:)好吧,就像magic\u quotes\u gpc不好一样。这是一种魔力,无论你愿不愿意,它都能逃脱一切。相反,在使用转义的地方处理转义,您可以毫无问题地更改内容。因此:
function post($key) {
if(array_key_exists($key, $_POST)) {
return $_POST[$key];
}
return false;
}
在需要的地方逃跑。否则,事情可能会看起来很奇怪,逃避它们将无法解决问题。考虑这一点;我在一个文本框中输入我的姓,O'Hara
。您想echo
将其返回,但可以使用getPost
获取它。以下是我得到的反馈:
奥哈拉
您是否再次htmlspecialchars
?那么,我得到:
O\&39;阿糖胞苷
或者别的什么。这种情况经常发生在我身上,令人非常恼火——请不要这样做。我不会说没用,只是有点误入歧途。您应该在将其用于需要转义的上下文之前立即进行转义。例如,如果要将值发送回浏览器,可以执行以下操作:
echo htmlspecialchars($_GET['name']);
mysql_query(... 'INSERT INTO users VALUES ("'.mysql_real_escape_string($_GET['name']).'")');
但如果要将其发送到数据库,可以执行以下操作:
echo htmlspecialchars($_GET['name']);
mysql_query(... 'INSERT INTO users VALUES ("'.mysql_real_escape_string($_GET['name']).'")');
有了你的方法,你就知道你能用它做什么。如果您这样做:
echo getGet('name');
您将打印出一个MySQL转义字符串,而不是实际名称。请参阅底线:批发卫生是无用的。在使用数据时使用正确的方法对其进行清理。(不过,写更少的代码并不反对将卫生设施放入函数的基本思想。)嗯,我并没有在所有的POST值中使用它。它只是在真正需要的时候重新使用。不管怎样,回答得很好。感谢sql insert查询看起来有点难看……还可以使用
mysqli
或PDO
,而不是mysql\ucode>扩展。并使用准备好的语句,而不是mysql*\u real\u escape\u string
。