此网址包含带文字的参数:
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参数做些什么?
答案 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'])){}
不要认为:$_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与准备好的语句。