[置顶] 长期出售:Godaddy老域名,Godaddy历史BA老域名!

[置顶] 长期出售:搜狗pr域名,搜狗收录域名,搜狗权重域名!

[置顶] 长期出售:高外链域名,高反链域名,权重域名,有收录的域名!

Protected继承的访问权限

Protected关键词所处理的是一种被称为继承的概念,所谓继承就是选一个现成的类——我们称之为基类——然后在不改变已有类的前提下,往里面添加新的成员。你还可以修改已有类的成员的行为方式。要继承一个已有的类,你必须说明新的类extends一个已有的类。

如果你创建了一个新的package,并且其中某个类还继承了另一个package里面的类,那么你只能访问原先那个package的public成员。当然如果是在同一个package里面继承的话,那么你还可以访问package权限的成员。有时基类的创建者会希望派生类能访问某个成员,而其它类则不能访问。这就是protected要做的。Protected也赋予成员package权限——也就是说,同一个package里的其它类也可以访问protected元素。

Java中的复用类

Java最令人心动的特性就是它的代码复用了。但是仅仅拷贝源代码再作修改是不能被称为“革命”的。那是C之类的过程语言所采用的办法,而且也不怎么成功。就像Java里的一切,要解决这个问题还要靠类。你可以利用别人写好的、已经测试通过的类来创建新的类,不必一切都从零开始。

这么做的诀窍就是,要在不改动原有代码的前提下使用类。第一种非常简单:在新的类里直接创建旧的类的对象。这被称为合成,因为新的类是由旧的类合成而来的。你所复用的只是代码的功能,而不是它的形式。

第二种方法更为精妙,它会创建一个新的,与原来那个类同属一中类型的类。你全盘接受了旧类的形式,在没有对它做修改的情况下往里面添加了新的代码。这种神奇的做法就被称为继承。编译器会承担绝大部分的工作。继承是面向对象编程的基石,它还有一些额外的含义。合成与继承在语法和行为上有许多相似之处,这很好理解,因为它们都是在原有类的基础上创建新类。

PHP中图像文件如何上传

要为网站增加可上传切屏图像的支持,尽管这看起来不算太困难,但确实需要对应用做多处修改。出于这个原因,最好在具体深入代码之前先做一个规划。首先,使用ALTER为数据库增加一个列,要修改数据库,它需要一个新的列存储每个切屏图像文件的文件名。由于我们计划把所有图像文件都放在同一个文件夹中,所以只需要在数据库中存储文件名本身而不包含路径。

其次,要修改表单,使用一个文件输入域以允许图像文件上传。在增加页面上已经有一个表单来增加内容,所以我们需要修改这个表单,在其中增加一个文件输入域。结合web浏览器,这个输入域可以为用户提供一个用户界面来选择要上传的文件。

向数据库中插入图像文件名

图像文件名作为INSERT语句的一部分存储在数据库中。只是通过一个表单向web服务器上传图像文件还不够。还必须在数据库的新列中存储文件名,从而能够访问和显示图像。实际上,ADD脚本已经使用SQL INSERT语句向表插入了新的内容,不过这个语句并没有考虑到新增的列。

由于这个SQL语句只是插入值,而没有明确各自的列名,因此对应每一列都必须包含一个值。不过我们刚增加了一个新列,这说明这个查询无法再正常工作,它缺少对应新列的值。所以要把一个切屏图像文件名作为新的数据行的一部分增加到数据库中,要求我们还要向INSERT语句增加一个新的值。

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

确实,“需要”这个词的与其可能有点过强,不过尽可能地组织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。坚持一贯地做这种小工作,比如需要一个数字时就检查它是否是一个数字,最后会让你的应用尽可能安全而免受数据攻击。

«808182838485868788899091929394»

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

Copyright www.thyst.cn. Some Rights Reserved.