1.在安装PHP时,以web服务器的SAPI模块方式安装PHP比以CGI接口的方式安装PHP更安全、更有效。
2.实现SSL(Secure Sockets Layer Protocol加密套接字层)的网络协议和软件都是按照一种层次堆栈的形式来组织。每一次能够将数据传输到下一层或上一层,并且能够向上一层或下一层发出服务请求。如下图所示,自上向下分别为:应用层、传输层、网络层、至网络层的主机
| |||
IP | |||
Various |
使用SSL层将为这种模型添加一个额外的透明层。SSL层介于传输层和应用层之间,在将信息发送到传输层以将其送到目的地之前,SSL层修改来自HTTP应用层的数据,如下图所示:自上向下分别为应用层,SSL层,传输层,网络层,至网络层的主机
| ||||
TCP | ||||
IP | ||||
Host to Network |
当一个web服务器通过HTTP连接到一个安全的web服务器时,两者需要通过一个握手协议来达成一些共识,如身份验证和加密,其中握手序列包括如下步骤:
a.浏览器连接到一个启用了SSL的服务器并要求服务器验证自己
b.服务器发送数字证书
c.服务器有时可能(很少出现)要求浏览器证明其自身
d.浏览器列出一组算法和它支持的哈希函数。服务器选择它所支持的功能最强大的加密算法
e.浏览器和服务器生成会话密钥,生成过程中,服务器和浏览器之间又发生了如下的会话:
- 浏览器从数字证书上获得服务器的公有密钥,并使用该公钥加密一个随机生成的数字
- 服务器对已简单文本形式发送的随机数据做出响应(除非浏览器已经为服务器的验证请求提供了数字证书,在这种情况下,服务器将使用浏览器的公钥)
- 用于会话的加密密钥通过使用哈希函数从随机数中产生
3.可以看到建立一个SSL的握手连接需要经过较多的步骤,但幸运的是,结果将被缓存起来,如果同样的浏览器和服务器需要多次交换安全信息,握手过程发生一次,处理时间也只有一次。
4.当数据通过SSL连接发送时,将遵循以下步骤:
a.将数据分成易管理的数据包
b.压缩每个数据包(可选)、
c.每个数据包有一个信息验证码(MAC),信息验证码是通过哈希算法计算出来的
d.将MAC和压缩的数据包组合到一起并加密他们
e.加密后的数据与头信息组合在一起并被发送到网络中
5.被加密的数据包被包含在TCP包中,这意味着信息在传输途中还是有可能遭到修改,尽管不能被识别里面的内容及交换的信息,但是他们仍然能够看到谁在交换信息
6.SSL在加密之前包含压缩信息的原因是:尽管在网络传输中可以压缩大多数网络通信,但是 不能很好地压缩已加密数据,压缩模式依赖于数据的重复两和模式。在数据经过加密已经变成非常随机的组合之后,试图用一种加密算法通常是没有意义的。
7.在用户数据进入数据库之前过滤该数据可使用addslashes()函数,它将过滤掉可能会引起数据库问题的字符,可以使用stripslashes()函数将数据返回到它的原始形式
8.可以在php.ini配置文件中开启magic_quotes_gpc和magic_quotes_runtime这两个选项,这两个选项将自动地过滤和添加斜杠。前者用于格式化get、post、cookie变量,后者用于格式化进出数据库的数据
9.当传递用户数据给system()和exec()时,必须使用escapeshellcmd(),该函数可以避免任何怀有恶意的用户输入强迫系统运行的某些特定指令