PHP个人网站架设连环讲(二)

 更新时间:2016年11月25日 16:53  点击:2184
三 首页新闻发布,让你更新更轻松(上)
--------每次在首页中增加一条消息,加两句话,就得整个页面都上传一遍,真是不值!于是象蓝风这种懒汉就想了一个一劳永逸的办法,真正的动态实时,远程管理编辑,自动维护功能。也可以用来做虚拟社区的公告板。(如果改吧改吧,就可以把你的新闻中心的新闻在首页自动生成提要了,呵呵。)这么多功能,大家多多原谅,嘿嘿。
--------先插几句题外话,我们做网站时,是用html中间点缀PHP呢,还是用PHP来生成html?专业的站点可以把一个功能集中在一页,通过这一页调用不同的模块来实现各个子功能(这样客户端是不是就只有一页了呢?我没有试过)。不管怎样,功能模块化的软件复用是高效率开发的一个重要方法(也能节省你的主机空间哦^_^)。
 
--------好了,下面我们就一起来把功能模块化吧。初学者请仔细阅读代码,尤其要注意基本函数的用法。高手就可以略过这一段了,呵呵(这么认真干吗?都看得人家不好意思了9-()。
 
<?php
/*head.php 为了避免被别人直接键入head.inc下载你的源代码,最好用php做后缀,这样,你的服务器才会先截获它进行处理,呵呵*/
echo "<html><head><title>"
echo "网管之路"//如果标题常变,可做一个函数。
echo "</title></head>"
?>
这是一个写html头的一功能块。
<?php
/*makestr.php 定义一个公用处理文本中超链接的函数,假定文本中链接形式为${http://www.yoyonow.net|网管之路}*/
function makestr($text)
{ $str=$text;
$a=strstr($s,'$}');//切除在$s中'${'之前的子串
if($a){
$b=strstr($a,'}');
if($b){
$la=strlen($a);$ls=strlen($s);//取串长
$s=substr($a,0,$ls-$la);//取子串,第二个参数为起点,第三个参数为取字符的个数
$a=substr($a,2);//去掉'${'
$lb=strlen($b);$la=strlen($a);
$a=substr($a,0,$la-$lb);//取出超链接部分
$b=substr($b,1);//去掉'}'
$ta=strstr($a,"|");//寻找是否存在需要做链接的文字
if($ta){
$la=strlen($a);$lt=(strlen($ta);
$linktext=substr($a,$la-$lt+1);
$a=substr($a,0,$la-$lt);
}
else{
$linktext=$a;
}
$s=$s."<a herf="".$a."">.$linktext."</a>.$b;//准备返回字串
}
}
return($s);
}
--------如果你是一个新手,那么应该找一本html入门的书来看看。否则是很难成为一个PHP高手的。这些你开始看起来 非常简单的处理字符串的函数,经过你的巧妙运用,是能做很多漂亮的事的。下一讲,我们就可以看到我们准备了大半天的成果了,呵呵。

flush();
$ftp_ini_datei    = $argv[1];
require ('./ftp_class.php');
require ($ftp_ini_datei);
echo " Cronjob started : ";
echo date("d.m.Y    - H:i:s");
echo " ";
$newftp    = new myftp;
if(!$anonymous){
    $result     = $newftp->connect($host, $user, $password);
}else{
    $result        = $newftp->connect($host, "anonymous", "mymail@somewhere.com");
}
if (!$result){
    $mydir    = $newftp->changedir($remote_dir);
    $mydir        = $newftp->getdir();
    $merkold_dir    = getcwd();
    chdir($local_dir);
    $mylist     = Array();
    $mylist     = $newftp->get_file_list($mydir);
    
    for ($i=0; $i < sizeof($mylist); $i++)
    {
        $result = $newftp->get_file($mylist[$i], $mymode, $delete);
    }
    $result     = $newftp->ftp_bye();
}else{
    echo "---------------------------------- ";
    echo "no connection established :(         ";
    echo "---------------------------------- ";
}
echo " Cronjob stopped : ";
echo date("d.m.Y - H:i:s");
echo " ";
?>
<?php
$mymode       = FTP_ASCII;
$delete       = 0;
$local_dir    = "/my_local_download_directory";
$host        = "ftp.yahoo.de";
$remote_dir    = ".";
$anonymous        = 0;
$user        = "myusername";
$password    = "mypassword";
?>

三 首页新闻发布,让你更新更轻松(下)
-----上一讲里,我们已经实现了首页新闻发布的基本功能。在这一讲里,我们再给它添砖加瓦,使它的功能更为强大。(一个好用的软件,其实也就是基本功能加上一批附属功能,这些附属功能主要也是图个方便而已,呵呵)
-----首先,我们再明确一下我们想获得什么方便。我们不希望几十天以前的东西我们忘了删除,结果还作为新闻发布在首页(很丢脸的哦^&^)。如果我们在基本实现中嵌入一段代码,比如说用filectime($filename),那么在UNIX下,我们就可以得到从1970年1月1日起以秒计到最后一次文件被改动的时间(在WINDOWS下返回的是文件生成的日期时间),而从 1970年1月1日起以秒计到现在的秒数可以用$mynow=mktime()来获得,减法,判断,IF >我们期望的时间,嘿嘿,Sorry,unlink($newspath.$filename)……什么?!您问这段代码应该放在哪儿?您说呢,呵呵。
或许,你并不是常在一台机器上上网,当你获得了一条新的新闻后却不在你的爱机旁,怎么办?最理想的莫过于在主页上上传文件咯。你或许有一个页面(Admin?)需要用密码才能进入(假如你还爱惜自己的网站的话,这是有必要的,最好连文件名都不要让别人知道,呵呵)。下面是一段到处可见的文件上载的代码:
<?
if(isset($upfile))
{
?>
已上载的文件信息如下:
文件存放路径 : <?echo $upfile;?>
原始文件名 : <?echo $upfile_name;?>
文件大小(字节): <?echo $upfile_size;?>
文件类型 : <?echo $upfile_type;?>
<?
}
else
{
?>
<html>
<head><title>新闻上传</title></head><body>
<form enctype="multipart/form-data" method="post" action="<?echo $PHP_SELF;?>">
<input type="hidden" name="MAX_FILE_SIZE" value="50000">
请选择或输入上传文件名: <input name="upfile" type="file">
<input type="submit" value="上传" name="submit">
</form>
</body></html>
<?
}
?>
-----这里我们又见到了PHP和HTML结合的一种形式,可以借鉴。文件上载虽然方便,但总给人一种不安全感。一旦泄密,你的服务器的系统安全就受到了威胁,因为上载的文件可能是一些破坏性的执行文件(也就是病毒或黑客程序啦)稳妥的做法是写一个在线编辑的文件,下面是一个示例:
可以读/etc/passwd!
这段。。
[文件上载]
PHP自动支持基于RFC 1867的文件上载,我们看下面的例子:
<FORM METHOD="POST" ENCTYPE="multipart/form-data">
<INPUT TYPE="FILE" NAME="hello">
<INPUT TYPE="HIDDEN" NAME="MAX_FILE_SIZE" VALUE="10240">
<INPUT TYPE="SUBMIT">
</FORM>
上面的代码让用户从本地机器选择一个文件,当点击提交后,文件就会被上载到服务器。这显然是很有用的功能,但是PHP的响应方式使这项功能变的不安全。当PHP第一次接到这种请求,甚至在它开始解析被调用的PHP代码之前,它会先接受远程用户的文件,检查文件的长度是否超过“$MAX_FILE_SIZE variable”定义的值,如果通过这些测试的话,文件就会被存在本地的一个临时目录中。
因此,攻击者可以发送任意文件给运行PHP的主机,在PHP程序还没有决定是否接受文件上载时,文件已经被存在服务器上了。
这里我就不讨论利用文件上载来对服务器进行DOS攻击的可能性了。
让我们考虑一下处理文件上载的PHP程序,正如我们上面说的,文件被接收并且存在服务器上(位置是在配置文件中指定的,一般是/tmp),扩展名一般是随机的,类似“phpxXuoXG”的形式。PHP程序需要上载文件的信息以便处理它,这可以通过两种方式,一种方式是在PHP 3中已经使用的,另一种是在我们对以前的方法提出安全公告后引入的。
但是,我们可以肯定的说,问题还是存在的,大多数PHP程序还是使用老的方式来处理上载文件。PHP设置了四个全局变量来描述上载文件,比如说上面的例子:
$hello = Filename on local machine (e.g "/tmp/phpxXuoXG")
$hello_size = Size in bytes of file (e.g 1024)
$hello_name = The original name of the file on the remote system (e.g "c:temphello.txt")
$hello_type = Mime type of uploaded file (e.g "text/plain")
然后PHP程序开始处理根据“$hello”指定的文件,问题在于“$hello”不一定是一个PHP设置的变量,任何远程用户都可以指定它。如果我们使用下面的方式:
http://vulnhost/vuln.php?hello=/etc/passwd&hello_size=10240&hello_type=text/plain&hello_name=hello.txt
就导致了下面的PHP全局变量(当然POST方式也可以(甚至是Cookie)):
$hello = "/etc/passwd"
$hello_size = 10240
$hello_type = "text/plain"
$hello_name = "hello.txt"
上面的表单数据正好满足了PHP程序所期望的变量,但是这时PHP程序不再处理上载的文件,而是处理“/etc/passwd”(通常会导致内容暴露)。这种攻击可以用于暴露任何敏感文件的内容。
 
[!--infotagslink--]

相关文章

  • 如何获取网站icon有哪些可行的方法

    获取网站icon,常用最简单的方法就是通过website/favicon.ico来获取,不过由于很多网站都是在页面里面设置favicon,所以此方法很多情况都不可用。 更好的办法是通过google提供的服务来实现:http://www.google.com/s2/favi...2014-06-07
  • mac下Apache + MySql + PHP搭建网站开发环境

    首先为什不自己分别搭建Apache,PHP和MySql的环境呢?这样自己可以了解更多知识,说起来也更酷。可也许因为我懒吧,我是那种“既然有现成的,用就是了”的人。君子生非异也,善假于物也。两千年前的荀子就教导我们,要善于利用工具...2014-06-07
  • php实现网站留言板功能

    我要实现的就是下图的这种样式,可参考下面这两个网站的留言板,他们的实现原理都是一样的畅言留言板样式:网易跟帖样式:原理 需要在评论表添加两个主要字段 id 和 pid ,其他字段随意添加,比如文章id、回复时间、回复内容、...2015-11-08
  • 网站广告怎么投放最好?首屏广告投放类型优化和广告位布局优化的案例

    网站广告怎么投放最好?一个网站中广告位置最好的是哪几个地方呢,许多的朋友都不知道如何让自己的网站广告收效最好了,今天我们就一起来看看吧。 在说到联盟优化前,...2016-10-10
  • 个人站长做网站应该考虑的一些问题

    个人网站建设应该考虑哪些问题呢?这个问题我们先在这里不说,下文会一一列出来,希望这些建义能帮助到各位同学哦。 我相信VIP成员里面有很多站长,每个人几乎都拥有一个...2016-10-10
  • 分享利用论坛签名提升网站权重

    分享一篇利用论坛签名提升网站权重的方法,在推广中论坛签名也是一种不错的外链推荐的方法,但现在权重越来越低了,有需要的朋友可以看看。 话说有一天在站长网上面看...2016-10-10
  • 网站排名提升后稳定排名方法

    一、靠前排名成搜索关注的对象   从搜索引擎的角度考虑一下,就不难理解为什么搜索引擎对排名在首页的网站那么慎重,甚至对新进排名在首页的一些网站进行为期一个多月的...2016-10-10
  • 如何有效提高网站的用户回头率

    第一,网站的内容;请各位站长朋友不要一天到晚只想着出什么好的绝招来推广网站,却忽略了网站的内容;其实网站的内容是极为重要的,因为这是你的本,你的根!网站的内容只有不断...2017-07-06
  • 如何提高网站pv 吸引力

    关于如何提高网站的吸引呢,下面我们列出了5点,让你的网站pv大大的提升哦   1、建立一个清晰的网站地图   一个清晰的网站地图可以给你的用户提供一个简介明了的...2017-07-06
  • 用PHP与XML联手进行网站编程

    一、小序 HTML简单易学又通用,一般的PHP程序就是嵌入在HTML语言之中实现的。但是随着WEB越来越广泛的应用,HTML的弱点也越来越明显了。XML的出现,弥补了这些不足,它提供...2016-11-25
  • C#网站生成静态页面的实例讲解

    今天小编就为大家分享一篇关于C#网站生成静态页面的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧...2020-06-25
  • 网站改版了怎么办?

    网站改版了怎么办?很多网站在改版的时候,非常担心用户习惯。   有的担心是合理的,有的担心是多余的。担心之前,先搞清两个问题:   首先,你有没有老用户?有多少老用户?如果...2016-09-20
  • 如何提高网站品牌形象

    这两个网站的title和description部分关键词有点过于强调,决定弱化这种现象成了我的当务之急,以提高网站在搜索引擎里的品牌形象(搜索引擎返回结果就这两部分)。通过分析...2016-10-10
  • 对于网站快速提升排名10种方法分析

    在耽误近一年时间的情况下,痛定思痛,决定自己动手做公司网站的SEO,具体过程如下:   1.买了几本专门SEO方面的书本,啃了两个星期,经常上比如www.111cn.net 和seo教程why之类...2016-10-10
  • 百度不更新网站原因分析

    百度不更新网站原因分析 今天我们来看一篇关于 哦,你是不是其它的之一呢,好了下面来看看各位站长总结了来百度不更新网页的原因吧。 一、首页的大flash图片。   ...2016-10-10
  • python 制作网站筛选工具(附源码)

    平常工作生活中,boos可能会给我们很多网站取提取信息,这些网站有的无法响应,有的404,有的501…真的需要所有网站都访问再提取信息吗?今天写一个小工具用于筛选网站中能访问的网站,在此仅举一例,即状态码为200。...2021-01-22
  • 那类网站放Google adsense广告好

    那类网站放Google adsense广告好呢,好了费话不说多了我们来看看Google adsense吧  1. 增加Google AdSense的展示效果,理论上是页面越多,展示的就越多。但是Google...2017-07-06
  • 如何提高网站内页权重

    如何提高网站内页权重 前面做站者总结出来的道理其实都是很实惠的,只是你有没有那个恒心去坚持了。所谓的“内容为王,外链为后!”是一点都不假的,一名站长...2017-07-06
  • 提高网站转化率

    在线预订系统即便存在一点点小错误,也可以导致有价值客户的流失。Jones在其主题为“别让我想,也别让我等”的演讲中,强调客户满意度必然可以换来客户忠诚度。...2016-10-10