我有一个PayPal IPN PHP文件设置,它将所有IPN帖子内容变量分配给变量。这个文件只能从paypal.com“点击”(即没有人应该知道它的网址)。
我的问题是我应该采取必要的步骤来过滤和清理PayPal的POST数据,还是屏蔽我的IPN文件名(IPN_082j3f08jasdf.php)?
另外,有人可以确认我的消毒代码吗?这很基础。我在通过POST或GET发送的一切上运行它,我的目标是防止任何类型的MySQL注入或黑客做的任何事情。
function filter($data){
// changes & to &
// changes " to "
// removes \ < >
$data = trim(htmlentities(strip_tags($data)));
if(get_magic_quotes_gpc()){
$data = stripslashes($data);
}
$data = mysql_real_escape_string($data);
return $data;
}
答案 0 :(得分:3)
模糊文件名是从不 - 你需要过滤POST数据,是的。假设在您证明它之前,PayPal不会调用脚本。
卫生看起来还不错 - 如果您的代码变得很长,我会倾向于分两步消毒它 - 开始时的strip_tags和基本卫生设施,以及在您联系数据库的同时逃离的mysql - - 它使维护IMO变得更容易。答案 1 :(得分:1)
你也可以考虑使用Kohana php框架使用的更强大的过滤机制,可以在这里找到:
http://svn.bitflux.ch/repos/public/popoon/trunk/classes/externalinput.php
答案 2 :(得分:-1)
对不起的建议表示歉意!请忽略这篇文章! - 保持未删除,因为它在下面产生了一些有趣的讨论
如果没有人知道它的URL,那么SQL-sanitize可能不是一个大问题。除非有人劫持您的目录列表,否则屏蔽您的IPN文件应该足够了。
htmlentities()
需要有一个ENT_QUOTES标志来转换引号。
如果启用了get_magic_quotes_gpc()
,那么strip_slashes
会自动完成...在您的情况下,看起来您将加倍条带斜线。
mysql_real_escape_string
strip_slashes()
已完成{{1}}的工作......