码迷,mamicode.com
首页 > Web开发 > 详细

php代码安全性问题

时间:2018-03-10 12:00:50      阅读:201      评论:0      收藏:0      [点我收藏+]

标签:类型   问题   函数   绑定   语句   登陆   结果   用户输入   编译   

1.网站一般都有一个统一的入口index.php,隐藏网站统一入口,url的重写

2.svn每个人给予不同的权限

3.防sql注入 解决办法:使用预编译语句,一般在sql语句中

在php中,对于mysql数据库有两个模块,mysql和mysqli,mysqli的意思就是mysql improve。mysql的改进版,这个模块中就含有“预编译”这个概念。像上面那个sql语句,改一改:select * from admin where username=‘?‘ password=‘?‘,它就不是一个sql语句了,但是可以通过mysqli的预编译功能先把他编译成stmt对象,在后期用户输入账号密码后,用stmt->bind_param将用户输入的“数据”绑定到这两个问号的位置。这样,用户输入的内容就只能是“数据”,而不可能变成“代码

<?php
//用户输入的数据
$name = ‘admin‘;
$pass = ‘123456‘;
//首先新建mysqli对象,构造函数参数中包含了数据库相关内容。
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME, DB_PORT);
//设置sql语句默认编码
$this->mysqli->set_charset("utf8");
//创建一个使用通配符的sql语句
$sql = ‘SELECT user_id FROM admin WHERE username=? AND password=?;‘;
//编译该语句,得到一个stmt对象.
$stmt = $conn->prepare($sql);
/********************之后的内容就能重复利用,不用再次编译*************************/
//用bind_param方法绑定数据
//大家可以看出来,因为我留了两个?,也就是要向其中绑定两个数据,所以第一个参数是绑定的数据的类型(s=string,i=integer),第二个以后的参数是要绑定的数据
$stmt->bind_param(‘ss‘, $name, $pass);
//调用bind_param方法绑定结果(如果只是检查该用户与密码是否存在,或只是一个DML语句的时候,不用绑定结果)
//这个结果就是我select到的字段,有几个就要绑定几个
$stmt->bind_result($user_id);
//执行该语句
$stmt->execute();
//得到结果
if($stmt->fetch()){
 echo ‘登陆成功‘;
 //一定要注意释放结果资源,否则后面会出错
 $stmt->free_result();
 return $user_id; //返回刚才select到的内容
}else{echo ‘登录失败‘;}
?>

5.上传文件类型的限制

6.验证码的安全验证  对比之后,清楚session中的验证码

7.系统模块化管理

8.隐藏文件的扩展名

php代码安全性问题

标签:类型   问题   函数   绑定   语句   登陆   结果   用户输入   编译   

原文地址:https://www.cnblogs.com/zay18/p/8537397.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!