每一个应用都需要一个图像文件夹

确实,“需要”这个词的与其可能有点过强,不过尽可能地组织PHP应用的各个部分确实很重要,而要做到这一点,一种方法就是为不同的组成部分创建相应的文件夹。由于上传的文件由用户提交,它们往往不是你能直接控制的,至少从文件名和数量上不能控制。所以把它们与其他应用文件分开单独存储是一个很好的方法。我们需要一个图像文件夹,上传到网站应用的图像文件都存储在这里。如果需要,这个文件夹也可以存储应用可能使用的所有其他图像。

图像文件夹与web服务器上的所有其它文件夹很类似,只是它必须放置在应用主web文件夹之下。通常将这个文件夹直接放在web文件夹下就可以了,不过如果愿意你完全可以创建一个更复杂的文件夹层次结构。如果图像文件夹就创建在web服务器的主web文件夹之下,则可以从PHP脚本引用图像文件。与变量类似,常量也存储一段数据。不过常量一旦设置它的值就不会再改变。输入到表单的图像文件名再与图像文件夹路径联接。如果你的PHP应用在别处托管,而不是在你的本地计算机上,则需要使用FTP创建图像文件夹。

利用PHP控制首部

利用PHP,可以精心控制由服务器发送给浏览器的首部,从而有可能完成一些首部驱动的任务,如HTTP认证。在PHP脚本中要利用内置header()函数将首部从服务器发送到浏览器。Header()函数允许从PHP脚本创建和发送首部。

Header()函数会立即从服务器向浏览器发送一个首部,而且这个函数必须在向浏览器发送任何具体内容之前调用。这是一个非常严格的要求,如果在首部之前即使只是发送了一个字符或空格,浏览器也会拒绝并报错。出于这个原因,header()函数调用应当放在PHP脚本中的所有HTML代码之前。即使<?php标记前面一个随意的空格也会导致这个脚本出错,<?php ?>标记内部的空格不会导致出现问题因为它们不会传递到浏览器。服务器发送页面中的任何HTML内容之前,会向浏览器发送这个首部进行处理。

安全性需要人类的干预

即使在我们生活的这个现代社会中,有时人类的思考仍是不能取代的,这是指能呼吸的真正的人类。在这种情况下,需要分析一个信息并评价它是否合法,很难脱离人的参与。这里讨论的就是仲裁,在公众看到某个内容之前,要由一个人负责批准将这个内容发布到web应用。

人类仲裁是一种非常好的方法,可以改善用户所提交内容的完整性。利用仲裁,尽管新的数据可以增加到数据库中,但是在仲裁人批准之前不会对公众显示。我们确实可以使用某种人类仲裁,当然,还是有可能有人精心加工一个截屏图,并逃过人类仲裁的法眼。但是这很不容易,而且有一点是肯定的,仲裁是一种很好的威慑。要记住,保护一个PHP应用的安全很大程度上都在于防范。

一个更安全的INSERT

除了利用表单域的保护较弱这一漏洞,SQL注入攻击含依赖于approved列恰好位于数据库结构中screenshot列的后面。正是由于这一点,只要在INSERT的最后增加1,就能将这个1设置到approved列。这里的问题在于构建INSERT查询所采用的做法是必须向所有列插入数据,而这增加了不必要的风险。可以将INSERT查询编写为准确地指定哪些值要放在哪些列中。

在表中插入数据时,数据的顺序必须与表结构中列的顺序完全一致。所以数据汇进入列中,不过实际上没有必要显式地插入ID,因为ID是自增的,而approved初始时总是0,更好的办法是只插入新数据明确需要的数据。ID和approved列则可以分别默认为auto_increment和0。

提出用户登录规划

为网站增加用户登录支持绝非易事,编写代码和运行数据库查询之前一定要明确可能涉及到哪些方面,这很重要。我们知道已经有一个存储用户的表,所以首先要修改这个表,使之存储登录数据。我们还需要为用户提供一个输入登录数据的途径,这要以某种方式与网站应用的其余部分集成,使得用户只能在成功登录后才能访问页面。

我们确定的登录开发步骤:1、使用ALTER向表中增加username和password列。数据库需要新的列来存储每个用户的登录数据。这里包括一个用户名和一个口令。2、构建一个新的login脚本,提示用户输入其用户名和口令。最终会由login表单保护个性化页面,因为它会提示用户输入一个合法的用户名和口令。这个信息必须正确输入,网站才能够显示用户特定的数据。所以这个脚本必须限制对个性化页面的访问,未合法登录的情况下将不能查看这些页面。3、将login脚本连接到网站应用的其余部分。需要确保用户只有通过login脚本登录才允许访问这些页面。

表单验证的必要性

要最小化SQL注入攻击的风险,最后一步需要在PHP脚本中加入表单验证。查看截屏图文件类型或截屏图文件大小是否在应用定义的限制范围内之前,需要检查表单域来确保它们非空。我们编程的时候代码本身没有任何问题,不过要保证一个应用的安全,这样一个调用通常远远不够。由于表单域需要一个数字,所以合理的做法是不只是检查值非空,还要检查这是一个数字值。

PHP  is_numeric()函数就可以完成这个工作,如果传入的值是一个数字则返回true,否则返回false。坚持一贯地做这种小工作,比如需要一个数字时就检查它是否是一个数字,最后会让你的应用尽可能安全而免受数据攻击。

用SHA加密口令

MySQL SHA()函数会把 一段文本加密为唯一的40字符编码。登录用户界面相当简单,不过我们还没有满足加密登录口令的需求。MySQL提供了一个名为SHA()的函数,它会对文本串应用一个加密算法。其结果是一个加密串,长度固定为40个十六进制字符,而不论原始口令的长度是多少。所以这个函数实际上会生成一个唯一表示口令的40字符编码。

由于SHA()是一个MySQL函数而不是PHP函数,所以调用这个函数时,要作为在表中插入口令的查询的一部分。在登录过程的另一端,同样需要用到SHA()函数,它会查看用户输入的口令是否与数据库中存储的加密口令匹配。

PHP中图像上传遇到的问题

如果php.ini文件可以用来控制上传文件的存储位置,为什么还有必要移动文件吗?因为并不总能修改php.ini。例如,如果你在一个虚拟web服务器上构建PHP应用,很可能不能改变php.ini中的位置。即使你能修改php.ini,也存在风险,因为如果需要把它移动到另一个服务器上,很可能会破坏你的应用。换句话说,应用会依赖于由php.ini控制的一个路径,而不是由你自己的PHP代码控制的路径。

当然如果上传的图像文件与先前上传的其它切屏图像同名,从而将后者覆盖。这个是因为存储在web服务器上的切屏图像使用了用户在文件上传表单域中提供的文件名。所以如果两个用户上传了文件名相同的图像文件,第一个用户的图像就会被第二个用户的图像所覆盖。这可不好。一种解决方案是为服务器上的图像文件名增加一定程度的唯一性。为此一种简单的方式是在文件名前面增加当前服务器时间。

网站建设过程中的3点经验分享

网站建设给商家、企业和公司的产品和服务的推介提供了一个很好的展示平台。网站建设的开展,也使得我们在不断寻求更多适合网站建设发展的方法,今天我们就给大家分享几点网站建设中的经验,供大家参考借鉴。

    首先,我们应该明白网站建设不是一蹴而就的事情。世上没有伸手即成的事情,即使速成了,那它的根基也不牢固。网站建设是一个不间断的长期坚持的过程。成功的秘诀就是坚持、坚持、再坚持,我们不能碰到一些问题就放弃,无论搜索引擎是否能找到我们的网站,我们的网站有没有流量,我们都应该坚持下去,这样你才能迎来胜利的曙光。

网站建设应重视用户体验

企业网站是为了帮助企业展示自己企业的信息、产品服务、互动交流和产生交易。所以网站要给人以可观、可信、可心、可用的感觉。这样我们在进行网站建设的过程中,要重视用户的体验,这就需要我们要重视两个方面:一是网站功能,二是网站外观,这两个方面缺一不可。

    第一,网站的功能,主要就是看我们想要建一个什么行业什么类型的网站,是门户网站,企业网站,商务网站还是咨询网站?不同的网站,它的功能也就不一样了。一般情况下,这个是不需要什么特别注意的,因为网站的功能最主要的是满足网站基本日常需求和符合客户的使用习惯,所以网站的行业和类型确定,那么网站的功能也就基本上固定了。

«383940414243444546474849505152»
最近发表
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
搜索
Tags列表
网站收藏
图标汇集
  • 订阅本站的 RSS 2.0 新闻聚合
友情链接

热门搜索: 外链域名 高外链域名 高收录域名

Copyright www.thyst.cn. Some Rights Reserved.