本文目录一览:
- 1、ThinkPHP如何防止SQL注入?
- 2、thinkphp为什么过滤style标签
- 3、thinkphp怎么做才是安全的sql防注入
- 4、php 关于thinkphp的防sql注入跟过滤问题
- 5、thinkphp怎么防止跨站请求
- 6、thinkphp5.0怎么防止网站盗链
ThinkPHP如何防止SQL注入?
(1)查询条件尽量使用数组方式,这是更为安全的方式;
(2)如果不得已必须使用字符串查询条件,使用预处理机制;
(3)使用绑定参数;
(4)强制进行字段类型验证,可以对数值数据类型做强制转换;
(5)使用自动验证和自动完成机制进行针对应用的自定义过滤;
(6)使用字段类型检查、自动验证和自动完成机制等避免恶意数据的输入;
(7)做一些过滤。
thinkphp为什么过滤style标签
xss过滤主要是应对传值的时候,防止恶意攻击者往Web页面里插入恶意html代码。
这种编辑器入库的根本不需要用xss过滤啊,可以用mysql_escape_string过滤一下入库,然后展示的时候用htmlspecialchars原型输出就可以了。
thinkphp怎么做才是安全的sql防注入
注入的产生一般都是对用户输入的参数未做任何处理直接对条件和语句进行拼装.
代码举例:
//不安全的写法举例1
$_GET['id']=8;//希望得到的是正整数
$data=M('Member')-where('id='.$_GET['id'])-find();
$_GET['id']='8 or status=1';//隐患:构造畸形查询条件进行注入;
//安全的替换写法
$data=M('Member')-where(array('id'=$_GET['id']))-find();//使用数组方式将自动使用框架自带的字段类型检测防止注入
$data=M('Member')-where(array('id'=(int)$_GET['id']))-find();//类型约束
$data=M('Member')-where('id='.intval($_GET['id']))-find();//类型转换
$data=M('Member')-where(array('id'=I('get.id','','intval')))-find();//本人习惯写法
$data=M('Member')-where(array('id'=':id'))-bind(':id',I('get.id'))-select();//PDO驱动可以使用参数绑定
$data=M('Member')-where("id=%d",array($_GET['id']))-find();//预处理机制
//不安全的写法举例2
$_GET['id']=8;//希望得到的是正整数
$data=M()-query('SELECT * FROM `member` WHERE id='.$_GET['id']);//执行的SQL语句
$_GET['id']='8 UNION SELECT * FROM `member`';;//隐患:构造畸形语句进行注入;
2.防止注入的总的原则是根据具体业务逻辑,对来源于用户的值的范围,类型和正负等进行限制和判断,同时尽量使用THINKPHP自带的SQL函数和写法.
3.在THINKPHP3.2版本中的操作步骤是:
一:在项目配置文件中添加配置: 'DEFAULT_FILTER' = 'htmlspecialchars', //默认过滤函数
二: 使用框架带的I方法获取来自用户提交的数据;
例子:M('Member')-save(array('content'=I('post.content')));这样添加的content内容是经过htmlspecialchars处理过的.
4.为COOKIE添加httponly配置
5.最新版本的thinkphp已经支持此参数。
6.HTML5值得观注的新特性:
9.富文本过滤
富文本过滤是,XSS攻击最令人头疼的话题,不仅是小网站,就连BAT这样的巨头也是三天两头的被其困扰.
php 关于thinkphp的防sql注入跟过滤问题
防止SQL注入
opensns
对于WEB应用来说,SQL注入攻击无疑是首要防范的安全问题,系统底层对于数据安全方面本身进行了很多的处理和相应的防范机制,例如:
$User = M("User"); // 实例化User对象
$User-find($_GET["id"]);
即便用户输入了一些恶意的id参数,系统也会强制转换成整型,避免恶意注入。这是因为,系统会对数据进行强制的数据类型检测,并且对数据来源进行数据格式转换。而且,对于字符串类型的数据,ThinkPHP都会进行escape_string处理(real_escape_string,mysql_escape_string)。
通常的安全隐患在于你的查询条件使用了字符串参数,然后其中一些变量又依赖由客户端的用户输入,要有效的防止SQL注入问题,我们建议:
查询条件尽量使用数组方式,这是更为安全的方式;
如果不得已必须使用字符串查询条件,使用预处理机制(3.1版本新增特性);
开启数据字段类型验证,可以对数值数据类型做强制转换;(3.1版本开始已经强制进行字段类型验证了)
使用自动验证和自动完成机制进行针对应用的自定义过滤;
字段类型检查、自动验证和自动完成机制我们在相关部分已经有详细的描述。
查询条件预处理
where方法使用字符串条件的时候,支持预处理(安全过滤),并支持两种方式传入预处理参数,例如:
$Model-where("id=%d and username='%s' and xx='%f'",array($id,$username,$xx))-select();
或者
$Model-where("id=%d and username='%s' and xx='%f'",$id,$username,$xx)-select();
模型的query和execute方法 同样支持预处理机制,例如:
$model-query('select * from user where id=%d and status=%d',$id,$status);
或者
$model-query('select * from user where id=%d and status=%d',array($id,$status));
execute方法用法同query方法。
thinkphp怎么防止跨站请求
TP当中有一个叫 “表单令牌" 的东西,再每个表单中插入 表单令牌, 可以令网站避免csrf请求。
thinkphp5.0怎么防止网站盗链
简单几行PHP实现防盗链
?php
//获取referer 从a.html来的没有referer参数,而从b.html来的有referer参数
if(isset($_SERVER['HTTP_REFERER']))
{
if(strpos($_SERVER['HTTP_REFERER'],"")==0)//判断$_SERVER['HTTP_REFERER']是不是以开始的
{
echo "username:kyx password:123456";
} else header("Location:warning.php");//跳转页面到warning.php
} else header("Location:warning.php");
?