我有这样的代码:
$myvar=$_GET['var'];
// a bunch of code without any connection to DB where $myvar is used like this:
$local_directory=dirname(__FILE__).'/images/'.$myvar;
if ($myvar && $handle = opendir($local_directory)) {
$i=0;
while (false !== ($entry = readdir($handle))) {
if(strstr($entry, 'sample_'.$language.'-'.$type)) {
$result[$i]=$entry;
$i++;
}
}
closedir($handle);
} else {
echo 'error';
}
Run Code Online (Sandbox Code Playgroud)
我对一些剥离和转义函数有点困惑,所以问题是,$myvar为了安全起见,我需要做些什么呢?在我的情况下,我不进行任何数据库连接.
您正试图阻止目录遍历攻击,因此您不希望该人放入./../../../或希望读取文件或文件名,这取决于您正在做什么.
我经常使用这样的东西:
$myvar = preg_replace("/[^a-zA-Z0-9-]/","",$_GET['var']);
Run Code Online (Sandbox Code Playgroud)
这将替换任何不a-zA-Z0-9-带空白的内容,因此如果变量包含say *,则此代码将删除该代码.
然后我改变a-zA-Z0-9-以匹配我想在字符串中允许的字符.然后我可以将其锁定为仅包含数字或我需要的任何内容.
| 归档时间: |
|
| 查看次数: |
1363 次 |
| 最近记录: |