【问题标题】:Validate url parameters in php [closed]在php中验证url参数[关闭]
【发布时间】:2012-02-11 22:18:26
【问题描述】:

我的 .htaccess 中有页面规则,显示属性 ID 等...

我想确保验证我得到的每个参数都得到了正确的查询。

我有:

RewriteRule ^(.*)$ page.php?page=$1
RewriteRule ^property/(.*)$ property.php?pid=$1

所以在我的 php 中我会这样做:

$page = $_GET['page'];

$propertyid = $_GET['pid'];

现在我需要保护它们,但我想知道哪种方法最适合用来保护它们,而这正是我迷路的地方。

【问题讨论】:

  • $_GET['page'] = 只有数字和字母? $_GET['pid'] 只是数字?
  • 这个问题到处都是。 1)这与SEO有什么关系? 2) “验证”和/或“安全”是什么意思?
  • 是的,我只为页面获取数字和字母,为 pid 获取数字
  • 我不希望我的网址是 property.php?pid=2 或 page.php?page=contact
  • 您要保护哪种安全性? SQL注入?然后只需转义字符串或使用具有适当类型传递的 sprintf 即可完成这项工作

标签: php validation .htaccess url mod-rewrite


【解决方案1】:

我认为页面参数应该有一个接受页面列表,然后在获取“页面”后,检查“页面”是否在接受列表中。 例如:

$arr_pages = ('page1','page2','page3');
$page = $_GET['page'];
if(in_array($page,$arr_pages))
{
// do some thing
}
else
{
 // page not found
}

还有身份证:

$propertyid = intval($_GET['pid']);

希望得到帮助:)

【讨论】:

    【解决方案2】:

    我会说使用这些规则:

    RewriteRule ^([a-z0-9]+)/?$ page.php?page=$1 [L,NC]
    RewriteRule ^property/([0-9]+)/?$ property.php?pid=$1 [L,NC]
    

    这样,如果有人输入除字母和数字(用于页面)和数字(用于财产)以外的任何字符,它将显示未找到的页面。

    如果你想真的确定,你可以

    $page = mysql_real_escape_string($_GET['page']); 只需确保您的数据库连接已打开,并且您可以像 $propertyid = (int)$_GET['pid']; 一样转换 pid

    【讨论】:

      猜你喜欢
      • 2020-12-20
      • 2017-02-21
      • 2011-11-12
      • 2014-09-17
      • 1970-01-01
      • 2011-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多