Php 动态更改页面 $.get('go',函数(更改){ $('#center').load('page/.html'); });
我有一些像这样的东西,但它不起作用。我只希望加载的页面(?go=name)不会刷新整个页面。首先,它容易受到LFI漏洞(本地文件包含)的攻击。考虑某人进入时发生了什么: 此外,您不能只回显您的文件名并期望它将其打印出来……如果您希望将页面内容包含在$go中并打印出$go,请使用:Php 动态更改页面 $.get('go',函数(更改){ $('#center').load('page/.html'); });,php,jquery,html,Php,Jquery,Html,我有一些像这样的东西,但它不起作用。我只希望加载的页面(?go=name)不会刷新整个页面。首先,它容易受到LFI漏洞(本地文件包含)的攻击。考虑某人进入时发生了什么: 此外,您不能只回显您的文件名并期望它将其打印出来……如果您希望将页面内容包含在$go中并打印出$go,请使用: <?php $go = $_GET['go']; if(!empty($go)) { if(is_file("page/$go.html")) include "page/$go.html
<?php
$go = $_GET['go'];
if(!empty($go)) {
if(is_file("page/$go.html")) include "page/$go.html";
else echo "<h1>Error 404</h1><p>Strona nie odnaleziona</p><p>Warunek ?go jest niepoprawny</p>";
}
else include "page/start.html";
?>
<script>
$.get('go', function(change) {
$('#center').load('page/<?php echo $go ?>.html');
});
</script>
编辑:实际上,如果您使用我上面的代码,他们仍然可以访问本地目录中的文件,例如.htpasswd和.htaccess,所以不要让您的用户包含任何本地文件。有更好的方法来解决你的问题
至于AJAX,请遵循jeroen的建议。您混合了两个AJAX函数,
$.get
和.load
,并且缺少一个事件处理程序
您将需要以下内容:
$go = urldecode([$_GET['go']);
$go = str_replace("/", "", $go);
$go = "page/$go.html";
如果go
按钮位于页面的刷新部分,我使用了live
而不是change
注意我猜您想根据选择刷新页面的某个部分,但问题/代码并不完全清楚…这是您想要实现的吗
$('#go').live('change', function() {
$('#center').load('page/' + $(this).val() + '.html');
});
$(文档).ready(函数(){
var getgo='';
if(getgo.length){
$('#center').load('page/'+getgo+'.html');
}
});
它将把page/[your go param].html的内容加载到#center。关于安全性的好消息(尽管他在末尾添加了
.html
),但是使用basename()
应该足够了。谢谢,我不知道PHP有这个功能。在任何情况下,如果使用basename(),仍然可以在当前目录中包含如下文件:@malfy,出于安全考虑总是更好:-)@jeroen:00 ESPCape使用了他额外的.html扩展名,因为PHP使用了类似C的字符串。如果您只是想在初始页面加载时加载数据,您不需要任何javascript
,只需使用PHP
即可。除非你想延迟加载,但这里似乎不是这样。是的,我也不知道你为什么要这样做,这只是我对问题的解释。但是,在客户端这样做可以避免在服务器端的url参数中包含一个名为的页面的安全问题!尽管OP似乎并不担心安全性:-)
<script type="text/javascript">
$(document).ready(function() {
var getgo = '<?php echo $_GET['go']; ?>';
if(getgo.length) {
$('#center').load('page/'+getgo+'.html');
}
});
</script>
<div id="center"></div>