2014-09-12 46 views
2

由于安全原因,我们需要禁用非盈利网站的php/mysql,因为它有很多漏洞。这是一个小型站点,所以我们只想重建没有数据库的站点并绕过管理页面的漏洞。查询php字符串中的字符串,从目录中的文件中提取值

该网站只需要保持活力,并保持休眠状态。我们不需要在将来更新网站,所以我们正在寻找一个静态设计。

我们当前的URL结构是这样的,它在从数据库中提取值的url中具有查询字符串。

例如artist.php?id = 2

我正在寻找一个简单快捷的方式改变artist.php,所以不是从数据库中提取值,而是只包含来自平面html文件的数据。

artist.php?id=1 = fetch data from /artist/1.html 
artist.php?id=2 = fetch data from /artist/2.html 
artist.php?id=3 = fetch data from /artist/3.html 
artist.php?id=4 = fetch data from /artist/4.html 
artist.php?id=5 = fetch data from /artist/5.html 

这样做的原因是我们需要保留用于SEO目的的URL结构。所以我不想为公众使用html文件。

我需要什么基本的PHP代码来实现这个目标?

+0

我想你想禁用PHP?然后这个问题需要更新(“我需要什么基本的PHP代码来实现这个目标?”) ^^为了达到这个目的 - 是否可以使用htaccess?如果是 - 您可以使用htaccess规则重定向。 – 2014-09-12 14:13:21

+0

对不起,可能没有做好解释自己的工作。恶意软件黑客正在使用该软件来澄清该网站并向其中注入代码,该软件中存在某些问题/某些漏洞。我们认为这很可能是受损的管理部分,并允许使用将代码注入网站。我自愿提供的非营利组织并没有任何预算聘请程序员,所以我只是想用我提出的方法让所有事情都“表面上”起作用,但要消除所有管理和恶意软件漏洞。 – 2014-09-12 14:36:37

回答

0

要做到这一点完全按照自己的要求会是这样的:

$id = intval($_GET['id']); 
$page = file_get_contents("/artist/$id.html"); 

如果$id === 0日除查询参数中的数字外,还有其他内容。你也可以在阵列中的艺术家的信息:

// datafile.php 
return array(
    1 => "Artist 1 is this and that", 
    2 => "Artist 2..." 
) 

,然后在artist.php

$data = include('datafile.php'); 
if (array_key_exists($_GET['id'], $data)) { 
    $page = $data[$_GET['id']]; 
} else { 
    // 404 
} 
+0

感谢您的答案,代码的第一段做了工作。我真的不知道关于PHP的任何知识,只知道回声,可用性以及php的开始和结束标记。直到我在第三行放置echo $页面时,第一个段落才真正起作用。 – 2014-09-12 14:50:19

+0

@AbdulKarim很高兴听到它的帮助!如果解决了您的问题,请接受答案。 – Schlaus 2014-09-12 14:54:42

0

HTML不是你最好的选择,但它的表弟是静态数据文件的最佳选择。

让我向您介绍XML! (到PHP parser的文档)

XML与结构类​​似于HTML,但它用于存储数据而不是网页。

如果不是你的html页面已经完成,你只需要为他们服务,你可以使用URL从网络服务器重写(如果你使用Apache,见mod_rewrite

最后一个纯PHP解决方案(我不推荐)

<?php 

//protect from displaying unwanted webpages or other vulnerabilities: 
//we NEVER trust user input, and we NEVER use it directly without checking it up. 
$valid_ids = array(1,2,3,4,5 /*etc*/); 
if(in_array($_REQUEST['id'])){ 
    $id = $_REQUEST['id']; 
} else { 
    echo "missing artist!"; die; 
} 
//read the html file 
$html_page = file_get_contents("/artist/$id.html"); 

//display the html file 
echo $html_page; 
+0

感谢您的解决方案,html文件已经写出来,所以现在改变它们有点太晚了。但是 - 我要感谢您的贡献,并且您还帮助我调试了Schlaus的代码为什么不适合我,因为他错过了回声。 – 2014-09-12 14:51:52

+0

@AbdulKarim记得尽快回复对你有用的每一个答案,并且接受解决问题的答案。但是,如果您在接受前至少等待24小时会更好,因为您可能会收到更好的答案。 – 2014-09-12 14:53:27

+0

谢谢我试着upvote你的答案,但它表示我njeed至少15代表。 – 2014-09-12 15:01:07