php *** 攻击_thinkphp网站攻击

hacker|
182

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 *** 。

用php建一个完整的网站都涉及哪些步骤?涉及哪些知识?

我认为看你是学习用还是要架设一个外网能访问的网站。

如果学习以上你列举的我觉得已经足够了,等你学的差不多的时候,就再学模板和框架。

如果你是架设面向外网的网站,要是自己电脑作主机,除了你列举的以外可能要看看IP映射,域名解析等等。如果你打算租服务器的话FTP,买域名,域名解析等等考虑进去。面向外网的话你自己手写代码而且是个人开发,那就是搞着玩玩的。想要做好提高效率,那就只好用模板和框架了,框架有zend framework,thinkphp等thinkphp自带模板,模板有 *** arty等,还要考虑安全性,php安全,sql注入攻击等等...纯手打,个人体会,不足请指教,谢谢。

用ThinkPHP 这样的框架开发门户网站,有什么缺点

ThinkPHP的优缺点如下:

1、高级模型:可以轻松支持序列化字段、文本字段、只读字段、延迟写入、乐观锁、数据分表等高级特性。

2、视图模型:轻松动态地创建数据库视图,多表查询相对简单。

3、关联模型:让你以出乎意料的简单、灵活的方式完成多表的关联操作。

4、模板引擎:系统内建了一款卓越的基于XML的编译型模板引擎,支持两种类型的模板标签,融合了Smarty和 *** P标签库的思想,支持标签库扩展。通过驱动还可以支持Smarty、EaseTemplate、TemplateLite、Smart等第三方模板引擎。

5、缓存机制:系统支持包括文件方式、APC、Db、Memcache、Shmop、Eaccelerator和Xcache在内的多种动态数据缓存类型,以及可定制的静态缓存规则,并提供了快捷 *** 进行存取操作。

6、类库导入:ThinkPHP是首先采用基于类库包和命名空间的方式导入类库,让类库导入看起来更加简单清晰,而且还支持冲突检测和别名导入。为了方便项目的跨平台移植,系统还可以严格检查加载文件的大小写。

7、扩展机制:系统支持包括类库扩展、驱动扩展、应用扩展、模型扩展、控制器扩展、标签库扩展、模板引擎扩展、Widget扩展、行为扩展和模式扩展在内的强大灵活的扩展机制,让你不再受限于核心的不足和无所适从,随心DIY自己的框架和扩展应用。

8、URL模式:系统支持普通模式、PATHINFO模式、REWRITE模式和兼容模式的URL方式,支持不同的服务器和运行模式的部署,配合URL路由功能,让你随心所欲的构建需要的URL地址和进行SEO优化工作。

9、编译机制:独创的核心编译和项目的动态编译机制,有效减少OOP开发中文件加载的性能开销。ALLINONE模式更是让你体验飞一般的感觉。

10、ORM:简洁轻巧的ORM实现,配合简单的CURD以及AR模式,让开发效率无处不在。

11、查询语言:内建丰富的查询机制,包括组合查询、复合查询、区间查询、统计查询、定位查询、动态查询和原生查询,让你的数据查询简洁高效。

12、动态模型:无需创建任何对应的模型类,轻松完成CURD操作,支持多种模型之间的动态切换,让你领略数据操作的无比畅快和更佳体验。

13、分组模块:不用担心大项目的分工协调和部署问题,分组模块帮你解决跨项目的难题。

14、AJAX支持:内置AJAX数据返回 *** ,支持 *** ON、XML和EVAL格式返回客户端,并且系统不绑定任何AJAX类库,可随意使用自己熟悉的AJAX类库进行操作。

15、多语言支持:系统支持语言包功能,项目和模块都可以有单独的语言包,并且可以自动检测浏览器语言自动载入对应的语言包。

16、模式扩展:除了标准模式外,系统内置了Lite、Thin和Cli模式,针对不同级别的应用开发提供更佳核心框架,还可以自定义模式扩展。

17、自动验证和完成:自动完成表单数据的验证和过滤,生成安全的数据对象。

18、字段类型检测:字段类型强制转换,确保数据写入和查询更安全。

19、数据库特性:系统支持多数据库连接和动态切换机制,支持分布式数据库。犹如企业开发的一把利刃,跨数据库应用和分布式支持从此无忧。

thinkphp 标签库会静态化吗

常说的页面静态化分为两种,一种是伪静态,即url 重写,一种是真静态化。我们以真静态化为主来讲讲。

什么是PHP静态化

PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同。

为什么要让网页静态化

一、加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高;

二、有利于搜索引擎优化SEO,Baidu、Google都会优先收录静态页面,不仅被收录的快还收录的全;

三、减轻服务器负担,浏览网页无需调用系统数据库;

四、网站更安全,HTML页面不会受php相关漏洞的影响; 观看一下大一点的网站基本全是静态页面,而且可以减少攻击,防sql注入。

数据库出错时,不影响网站正常访问。

生成html文章虽操作上麻烦些,程序上繁杂些,但为了更利于搜索,为了速度更快些,更安全,这些牺牲还是值得的。

PHP生成静态HTML页面的 ***

利用PHP模板生成静态页面

PHP模板实现静态化非常方便,比如安装和使用PHP Smarty实现网站静态化,也可以自己写一套模板解析规则,常见的可以模仿各类cms的模板规则。

1.使用PHP文件读写功能与ob缓存机制生成静态页面

比如某个商品的动态详情页地址是:

那么这里我们根据这个地址读取一次这个详情页的内容,然后保存为静态页,下次有人访问这个商品详情页动态地址时,我们可以

直接把已生成好的对应静态内容文件输出出来。

time()){//如果没过期

echo file_get_contents($goods_statis_file);//输出静态文件内容

exit;

}else{//如果已过期

unlink($goods_statis_file);//删除过期的静态页文件

ob_start();

//从数据库读取数据,并赋值给相关变量

//include ("xxx.html");//加载对应的商品详情页模板

$content = ob_get_contents();//把详情页内容赋值给$content变量

file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中

ob_end_flush();//输出商品详情页信息

}

}else{

ob_start();

//从数据库读取数据,并赋值给相关变量

//include ("xxx.html");//加载对应的商品详情页模板

$content = ob_get_contents();//把详情页内容赋值给$content变量

file_put_contents($goods_statis_file,$content);//写入内容到对应静态文件中

ob_end_flush();//输出商品详情页信息

}

?

2.使用nosql从内存中读取内容(其实这个已经不算静态化了而是缓存);

以memcache为例:

connect('memcache_host', 11211);

$mem_goods_content = $mem-get($goods_statis_content);

if($mem_goods_content){

echo $mem_goods_content;

}else{

ob_start();

//从数据库读取数据,并赋值给相关变量

//include ("xxx.html");//加载对应的商品详情页模板

$content = ob_get_contents();//把详情页内容赋值给$content变量

$mem-add($goods_statis_content,$content, false, $expr);

ob_end_flush();//输出商品详情页信息

}

?

memcached是键值一一对应,key默认更大不能超过128个字节,value默认大小是1M,因此1M大小满足大多数网页大小的存储

0条大神的评论

发表评论