不在发布文件夹中放着重要信息
1、扩展名为php的文件不能被公开
2、不想让其他人看到服务器上的文件内容,可以通过更改属性来限制访问
3、把写入密码等重要信息的文件放在发布文件夹中是非常危险的
1、如何读取其他文件的脚本
可以将作为web服务器的计算机设置为不对文件夹进行发布。包含重要信息的文件必须放在难以猜到位置的私有文件夹中。防止在发布文件夹中的文件不包含重要信息,需要用到的信息从其他地方读入即可。
2、读取其他PHP脚本文件
使用require_once命令为例,在使用该命令读取文件的情况下,文件只会被读取一次,无果无法读取文件,则停止处理。include_once命令只会读取一次,即使读取失败也会继续处理。
创建有重要信息的文件db_info.php,然后保存在不被发布的文件夹中
其他文件simple_select.php读取重要信息文件db_info.php
1、控制只打开一次的函数require_once打开重要信息文件夹db_info.php
2、调用db_info.php文件的属性名进行获取信息
避免在查询中输入非法数据
1、SQL注入点查找
发送方:simple.html:subnit提交编号
接收方:simple_delete.php:$_post["b1"]接收编号,进行查询:delete from rbk where empid=$b1_d
可以预想到tbk中的6和12等记录编号会赋给$b1_d
2、SQL注入
在输入需要删除编号的文本框中输入:1 or 1=1
即查询语句为:delete from rbk where empid=1 or 1=1
即empid=1的时候,或1=1的时候,就表示【所有记录都满足条件】
也就是说不仅第1个记录会被删除,表中所有数据都会被删除
3、预防措施
禁止输入非数字值
拿上面的实例来说,只要创建一个“如果发送了数字以外的数据,就不执行delete”的机制就可以了。
正则表达式
正则表达式是一种用于描述字符排列模式的方法,如[0-9]表示包含0到9的数字。
1、典型表达式
包含[]
[7]:包含了7
[0-9]:包含了数字
[a-z]:包含了小写字母
[A-Z]:包含了大写字母
[A-Za-z]:包含了大写字母或小写字母
[A-Z][0-9]:开头是大写字母,之后是数字的连续字符的模式
包含指定字符外的字符
[^0-9]:不包含数字
[^A]:包含A以外的字符
[^A-Z]:大写字母以外字符
[^0-9a-zA-Z]:数字和字母以外字符
其他
^h:以h开头
E$:以E结尾
7{3}:连续出现3次以上的7
2、使用正则表达式进行模糊查询
preg_match函数
preg_match函数是一个使用正则表达式进行模糊查询的函数。模糊查询不是瞄准某一个对象进行查询,二是查找具有某种特征的字符,从而得出更多检索结果的一种查询方式。
正则表达式需要用/括起来,如/[A-Za-z]/:包含所有字符,下面代码使用了正则表达式/[A-Za-z]/来检查字符串1234,因为字符串1234中不包含字母,所以结果会显示不包含
3、正则表达式检查非法输入
示例
检查邮编格式是否为“XXX-XXXX”
检查点:以3个0-9数字开始,以4个0-9数字结束
检查步骤:
3个0-9数字:[0-9]{3}
开始:^
4个0-9数字:[0-9]{4}
结束:($)
下面查询结果为暂且是ok的,但是想要在互联网上发布,仅仅这么做是不够的,为了进行更为严密的查询,还需要添加各种正则表达式。
如果不是数字则不进行查询
如果在$b1_d中输入字母等字符,则会显示“不要输入除数字外的内容”,并且不执行delete查询命令,如果没有输入字母等字符,就执行删除操作。
为了万全之策,不仅要检查是否输入了除数字意外的值,还要严格检查输入的数字是否恰当。
不执行非预期标签
1、发送恶意标签
例如非预期标签为:
html文件:send.html
php接收文件:receive.php
在文本框a中输入标签
因为html只负责发送字符,hph只负责打印字符,打印出标签内容那就直接使用到了页面上了。如果输入标签可以执行脚本,在某种情况下就会造成严重后果。
2、漏洞攻击
综上所述,将在web上输入的内容直接输出到页面上的程序时危险的,不怀好意的人会通过不断发送脚本使用户在无意中执行而已脚本。针对此类系统漏洞的攻击会一直持续下去,因此我们需要制作出能够避免脚本混入的web应用程序。
3、移除输入标签
让输出字符串中包含的标签无效,可以使用htmlspecialchars函数将标签等特殊字符转为其他字符串。
通过htmlspecialchars函数执行的转换
<:<
>:>
&:&
":"
':'
单引号只能在第2参数指定为ent_quotes的情况下进行,输入上面等符号,htmlspecialchars函数能够将这些字符转换为无法执行相应功能的字符串。
print ($_post["a"]);可以转换成
print htmlspecialchars($_post["a"]);
4、如何创建安全的脚本
1、放置在发布文件夹中的文件要尽量可能缩减到最少。一定不要放置密码等重要数据。对文件和文件夹设置访问限制
2、创建一个能够严格检查输入数据,并禁用指定格式意外的值的机制
3、创建一个不会根据发送的值执行预想之外的操作的机制