如果我像这样构建我的页面,我是否必须检查news_id是否也是news.php中的数字?或者这样安全吗?
的index.php:
if (ctype_digit($_GET['news_id'])) include('news.php');
news.php:
$query = mysql_query("SELECT * FROM news WHERE news_id = $_GET[news_id]");
$row = mysql_fetch_assoc($query);
if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');
答案 0 :(得分:4)
其他答案绝对正确,您绝不允许任何用户直接输入您的数据库或任何其他敏感区域。
你应该验证/清理来自$ _GET,$ _POST等的所有输入......你可以使用PHP内置的filter functions或使用内置在Cake PHP或Symphony等框架中的那些,它们都可以处理用户数据更容易。
jonstjohn有一个很好的观点,你可以通过这种方式让自己开放sql注入,以及基于将恶意代码提供给你的应用程序的其他形式的攻击。</ p>值得一读Jeff Atwood的25 most dangerous programming mistakes,了解这些问题以及其他问题的背景知识。
答案 1 :(得分:2)
简短回答:是的,你应该。
有人可能(并且会)请求news.php,绕过index.php。
答案 2 :(得分:0)
在将数据发送到MySQL之前,您确实应该将数据转义并清理它。不保证有人不会尝试通过帖子数据发送恶意内容。
$news_id = (int)$_GET[news_id];
$query = mysql_query("SELECT * FROM news WHERE news_id = " .
mysql_real_escape_string($news_id));
$row = mysql_fetch_assoc($query);
if (!mysql_num_rows($query)) exit('The news you're trying to read do not exist.');
答案 3 :(得分:0)