jri*_*iro 4 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_key_exists($s, $_GET))
return mysql_real_escape_string(htmlspecialchars($_GET[$s]));
else return false;
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以帮助理解为什么以及如何让它更好吗?也欢迎链接或参考.
只是想要总是改进:)
Ry-*_*Ry- 11
嗯,这与magic_quotes_gpc糟糕的方式一样糟糕.这是神奇的,无论你是否愿意,都会逃避一切.相反,处理它所使用的转义,你可以毫无问题地改变事物.所以:
function post($key) {
if(array_key_exists($key, $_POST)) {
return $_POST[$key];
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
并且在你需要的地方逃跑.否则,事情可能看起来很奇怪,无视它们会破坏这一点.考虑一下; 我O'Hara
在文本框中输入我的姓氏.你想要echo
它,但你用它来获取它getPost
.这是我得到的回报:
O \'哈拉
你htmlspecialchars
又来了吗?那么,我得到:
ø\' ARA
或者其他的东西.这种情况发生在我身上,令人非常恼火 - 请不要这样做.
我不会说没用,只是有点误导.您应该在需要转义的上下文中使用之前立即执行转义.例如,如果要将值发送回浏览器,则可以执行以下操作:
echo htmlspecialchars($_GET['name']);
Run Code Online (Sandbox Code Playgroud)
但是如果你想将它发送到数据库,你可以这样做:
mysql_query(... 'INSERT INTO users VALUES ("'.mysql_real_escape_string($_GET['name']).'")');
Run Code Online (Sandbox Code Playgroud)
使用您的方法,您可以使用它来解决问题.如果你这样做:
echo getGet('name');
Run Code Online (Sandbox Code Playgroud)
您将打印出一个MySQL转义字符串而不是实际名称.