如何使用url参数中的文本提高安全性:.php?parameter = text

时间:2012-10-13 14:22:24

标签: php security url parameters

此网址包含带文字的参数:

  

my-page.php?id_article = 1& alias = article-name

重写后的结果是:

  

1-物品name.php

对于id_article参数,我做了这个安全性:

if (isset($_GET[id_article] && $_GET[article] != null && $_GET[id_article] >= 1 && $_GET[id_article] <= 4 && (int) $_GET[id_article])

我可以为接受文字的alias参数做些什么?

2 个答案:

答案 0 :(得分:2)

首先,别名是否来自数据库?

对于你的例子:

my-page.php ?id_article=1&alias=article-name

重写后的结果是:

1-article-name.php

我的问题是:你要在1-article-name.php中显示什么,内容是从mysql数据库获取的?

如果是这样,只需使用mysql_real_escape_string来清理别名。

当然,首先别名不能为空:

if(!empty($_GET['alias'])){}

然后使用mysql_real_escape_string

不要认为:$_GET$_POST$_COOKIE等是安全的。

如果在某些SQL目标MySql中嵌入字符串,请使用mysql_real_escape_string函数来清理变量,为此必须使用MySql函数转义字符串:

使用htmlspecialchars如果在HTML标记中嵌入字符串,则必须使用htmlspecialchars将其转义。这意味着每个echo或print语句都应该使用htmlspecialchars。

祝你好运。

答案 1 :(得分:1)

在大多数情况下,没有必要对路线进行消毒,只需检查一下您的期望。

<?php 
//id_article (Not empty and is numeric and lower then or equals 4)
if(!empty($_GET['id_article']) && is_numeric($_GET['id_article']) && $_GET['id_article'] <= 4){}

//alias (Not empty)
if(!empty($_GET['alias'])){}
?>

备注:

如果您决定路由是否是选定的文件,例如:./some_path/1-article-name.php那么您至少应该使用basename()并检查文件是否存在。

如果您要对数据库查询字符串,您应该sql转义参数或使用PDO或mysqli与准备好的语句。