0

此 url 包含一个带有文本的参数:

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

改写后的结果是:

1-文章名称.php

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

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

我可以为接受文本的别名参数做什么?

4

2 回答 2

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, 等是安全的。

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

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

祝你好运。

于 2012-10-13T14:32:19.483 回答
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 和准备好的语句。

于 2012-10-13T14:42:13.510 回答