首页 > 代码库 > PHP程序员必须学习的第二课——网站安全问题预防

PHP程序员必须学习的第二课——网站安全问题预防

作为PHP程序员,第一课我们学习了基本的语法。那么在熟悉基本语法之后我们应该学些什么呢?我认为是安全问题。安全问题基于一个网站犹如基石,一着不慎,意味着灾难性的事故。

这里主要就提三点最简单,也是最重要的安全问题。以后再做补充。

1. include 

有时候,我们可能会根据用户的输入,include 一个文件,比如 

include $filename.'php'

那么如果我的$filename 是外部网站的一个连接呢,比如 http://www.hack.com/hack, 无疑会导致安全漏洞。

所以在写这种include 语句的时候我们必须首先判断该文件是否在本地存在。

if (file_exists($filename.'php'))
    include $filename.'php'

2. xss 注入

xss注入 ,即跨站点脚本注入,指用户在输入中添加类似与<script> alert("I‘m hacking")</script>这样的脚本语句。

常见的会被xss攻击的点包括 

 2.1$_SERVER[‘PHP_SELF‘] 

实例:

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
如果用户输入URL 为 

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert(‘hacked‘)%3C/script%3E

那么 表单中的内容就会变为:

<form method="post" action="test_form.php"/><script>alert('hacked')</script>
然后就会执行后面所加的js 代码。


 2.2表单中输入内容添加script 语句

如果在一个填写内容的表单中添加script 语句。如果不做处理,而又在网页上用echo直接输出的话也会在我们的网页中执行,所以对于从表单中的提交的数据,我们也要做一定的处理。

实例:

<form method="post" action="test_form.php"/>
<input name="text" type="text"/>
</form>

如果我在输入框中输入<script>alert(‘hacked‘)</script> 而如果我们的这个输入框中的内容又会在网页上显示的话,那么该脚本就会被执行。


2.2 处理方法

为了预防这样的攻击,我们可以用php中的一个函数——htmlspecialchars() ,它把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 &lt; 和 &gt; 另外我们还可以1使用


1.(通过 PHP trim() 函数)去除用户输入数据中不必要的字符(多余的空格、制表符、换行)
2.(通过 PHP stripslashes() 函数)删除用户输入数据中的反斜杠(\)


3. sql 注入

攻击的主要手法是在表单输入中添加注入sql语句。

如以下登录表单

<form method="post" action="test_form.php"/>
<input name="id" type="text"/>
<input name="password" type="password" />
</form>


如果我在id 框中输入 name; drop table *;而我在后台处理中又用到了 ”select from user where id=“.$id;

那么sql语句就会变为

select from user where id=name;drop table *;

然后所有数据表都被删除了。因此预防sql注入尤为重要。


处理方法:

php中有专门的函数 mysql_real_escape_string($sql); 它能够转义sql语句中的特殊字符。

对于输入框中提交数据,如果涉及到数据库操作,我们需要用以上函数处理。


实例:

$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);

$sql = "SELECT * FROM users WHERE
user='" . $user . "' AND password='" . $pwd . "'"




PHP程序员必须学习的第二课——网站安全问题预防