有人告诉我,最好将尽可能多的 PHP 文件保留在 public_html 之外。
有人建议我使用定义魔法常量来引用 public_html 之外的文件,这很好,我可以通过这样做从 public_html 上移一个目录。
我现在的问题是:
webroot 和文档根有什么区别?
为了防止目录遍历之类的东西,是否可以只引用 public_html 之外的一个目录的文件夹?或者我是否需要更进一步,许多目录才能确保无法访问这些文件?
我还希望不仅要避免/防止目录遍历,还要隐藏重要文件,例如每次建立连接时都包含我的 MySQL 用户名和登录详细信息的连接文件。
我需要directory traversal attack使用Python 来阻止我的代码.我在下面解释我的代码.
if request.GET.get('param') is not None and request.GET.get('param') != '':
param = request.GET.get('param')
startdir = os.path.abspath(os.curdir)
requested_path = os.path.relpath(param, startdir)
requested_path = os.path.abspath(requested_path)
print(requested_path)
tfile = open(requested_path, 'rb')
return HttpResponse(content=tfile, content_type="text/plain")
Run Code Online (Sandbox Code Playgroud)
在这里我需要用户运行这样http://127.0.0.1:8000/createfile/?param=../../../../../../../../etc/passwd它应该防止目录遍历攻击.
我正在编写一个 Perl 脚本来删除目录中的符号链接,并且我注意到当前使用 find 命令的方法需要花费相当多的时间。我正在寻找更有效的解决方案。
这是当前的代码片段:
system("find '$dir' -type l -exec rm -f {} \\;");
Run Code Online (Sandbox Code Playgroud)
我还尝试了使用 unlink 和 glob 的替代方案:
unlink glob("$dir/*") if -e $dir;
Run Code Online (Sandbox Code Playgroud)
然而,这两种方法似乎都有其缺点,我想知道是否有更优化的方法来实现 Perl 中的符号链接删除。
任何有关优化删除过程的见解或建议将不胜感激。谢谢你!
附加信息:
我收到了其他人的系统代码,该系统在浏览器中显示带有照片的文件夹.
例如,这是网站上可能的网址:
gallery.php?action=view&folder=Cars
Run Code Online (Sandbox Code Playgroud)
目前,您可以用../../../../../替换"Cars",这将很乐意显示Linux根文件夹.幸运的是,该网站目前处于离线状态.
我尝试使用realpath来解决这个问题.这是我到目前为止所拥有的:
case 'view' :
$name = realpath(dirname(__FILE__) . "/Content/Gallery/" . $_GET['folder']);
echo $name;
$data = $file->getPictures($name);
require 'Views/Gallery.view.php';
break;
Run Code Online (Sandbox Code Playgroud)
我在第三行添加了echo以查看URL是什么.在上面的url中,一切都很好,echo输出:
/var/www/Content/Gallery/Cars
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.但是,如果我输入/../../../../../../../../而不是"Cars",$ name变为/并且页面仍显示根文件夹.英语不是我的第一语言,所以我可能误解了真实路径的工作方式或工作原理.根据我的理解,它从给定的URL中删除../的任何实例.
有人可以告诉我我做错了什么吗?
我试图搜索这个问题,但找不到令人满意的答案.所以这是我的问题:
我正在浏览具有以下代码变体的目录:
一世.
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
#include<sys/stat.h>
void traverseDirectory(char name[100]){
DIR* dir;
struct dirent *ent;
struct stat states;
dir = opendir(name);
while((ent=readdir(dir)) != NULL){
stat(ent->d_name,&states);
if(!strcmp(".", ent->d_name) || !strcmp("..", ent->d_name)){
continue;
}
else{
printf("%s/%s\n",name,ent->d_name);
if(S_ISDIR(states.st_mode)){
strcat(name,"/");
strcat(name,ent->d_name);
traverseDirectory(name);
}
}
}
closedir(dir);
}
int main(){
char path[100];
printf("Enter the path:\n");
scanf("%s",&path);
traverseDirectory(path);
}
Run Code Online (Sandbox Code Playgroud)
这个遍历子目录但在遍历第一个子目录并打印其文件后给出分段错误.
输出是:
Enter the path:
/home/harshad/dump
/home/harshad/dump/TraverseDirectory.c
/home/harshad/dump/temp
/home/harshad/dump/temp/temptest.txt
Segmentation fault
Run Code Online (Sandbox Code Playgroud)
II.
#include<stdio.h>
#include<sys/types.h>
#include<dirent.h>
#include<string.h>
#include<sys/stat.h>
void traverseDirectory(char name[100]){
DIR* dir;
struct dirent *ent;
struct …Run Code Online (Sandbox Code Playgroud) 我通过路径遍历技术下载了一个网站的php文件,但是当我用记事本和记事本++打开文件时,我只得到加密文本.是否有任何工作方式以纯文本格式查看该文件并了解该文件中的内容,我只是要求教育目的.帮帮我
我在记事本文件中得到以下文字,
ELF Pi4 ´õ; 4 ( 4 4€4€ 4 44 € €È½8 Ƚ8 À8 @= @=Ä4 ìå ð9 ð“=ð“=À À H HHD D PåtdP½8 P==P== Qåtd /lib/ld-linux.so.2 GNU GNU /eNœó¼5‘Ù•áwÿ:ªÝFÿl … j º = ì
à ¬ r ® = q ë œ Ö ' q l Æ é Ž q ‡ â 1
€ v Ï
þ Ò ï N Ö L À ¨ ¤ € D
¼ ð
b 3 t
í á d ’ þ ³ …Run Code Online (Sandbox Code Playgroud) php ×3
c ×1
file-io ×1
perl ×1
perl-module ×1
python ×1
realpath ×1
subdirectory ×1
symlink ×1