资源描述
本周内容vPHP安全vPHP性能优化PHP安全v输入验证v跨站点脚本阻止vSQL注入v代码注入v命令注入vSession安全v文件访问安全v沙盒输入验证v输入验证v正则表达式vSanitizing 和 Logical过滤器v清理输入字符串跨站点脚本攻击阻止v拒绝特殊字符v利用HTTP-only Cookie解决XSSv使用filter_xss()阻止跨站点脚本攻击SQL注入v引号使用v预编译语句vLike使用vSQL错误处理v其它风险代码注入v路径校验v使用全路径v避免动态路径v验证文件名v其它代码注入风险命令注入v通过命令注入使资源衰竭v路径使用v隐含威胁Session安全v服务器端的弱点vURL SessionvSession鼓动v本地保护机制v服务器端过期机制v加密Session超出v基于IP的验证文件访问安全v加密读权限v加密写权限v上载文件现值v文件前面v安全模式vPHP编码v根目录管理沙盒v使用沙盒误导攻击v编译沙盒vIP地址限制v路由信息PHP性能优化vPHP代码人工优化v使用优化工具优化代码v页面文件压缩输出vMysql缓存优化配置v数据库优化PHP代码人工优化(一)v方法可静态化,速率可提升至 4 倍v使用echo而不是printv使用 echo 的多重参数,而不是字符串连接。v便利数组时foreach比while大约快20%-30%左右。v注销那些不用的变量尤其是大数组,以便释放内存。v尽量避免使用 _get,_set,_autoload。v在包含文件时使用完整路径,解析操作系统路径所需的时间会更少。v函数代替正则表达式完成相同功能PHP代码人工优化(二)v使用选择分支语句(译注:即 switch case)好于使用多个 if,else if 语句。v用 屏蔽错误消息的做法非常低效。v打开 apache 的 mod_deflate 模块。v数据库连接当使用完毕时应关掉。v$rowid 的效率是$rowid 的 7 倍。v错误消息代价昂贵。v尽量不要在 for 循环中使用函数,比如 for($x=0;$x prop+)要比递增一个局部变量慢 3 倍。v递增一个未预定义的局部变量要比递增一个预定义的局部变量慢 9 至 10 倍。v仅定义一个局部变量而没在函数中调用它,同样会减慢速度(其程度相当于递增一个局部变量)。PHP 大概会检查看是否存在全局变量。PHP代码人工优化(四)v方法调用看来与类中定义的方法的数量无关,因为我(在测试方法之前和之后都)添加了 10 个方法,但性能上没有变化。v派生类中的方法运行起来要快于在基类中定义的同样的方法。v调用带有一个参数的空函数,其花费的时间相当于执行 7 至 8 次的局部变量递增操作。类似的方法调用所花费的时间接近于 15 次的局部变量递增操作。v用单引号代替双引号来包含字符串,这样做会更快一些。因为 PHP 会在双引号包围的字符串中搜寻变量,单引号则不会。当然,只有当你不需要在字符串中包含变量时才可以这么做。v输出多个字符串时,用逗号代替句点来分隔字符串,速度更快。注意:只有 echo 能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP 手册中说 echo 是语言结构,不是真正的函数,故把函数加上了双引号)。PHP代码人工优化(五)vApache 解析一个 PHP 脚本的时间要比解析一个静态 HTML 页面慢 2 至 10 倍。尽量多用静态 HTML 页面,少用脚本。v除非脚本可以缓存,否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升 25%至 100%的性能,以免除编译开销。v尽量做缓存,可使用 memcached。memcached 是一款高性能的内存对象缓存系统,可用来加速动态 Web 应用程序,减轻数据库负载。对运算码(OP code)的缓存很有用,使得脚本不必为每个请求做重新编译。v并不是事必面向对象(OOP),面向对象往往开销很大,每个方法和对象调用都会消耗很多内存。v并非要用类实现所有的数据结构,数组也很有用。PHP代码人工优化(六)v不要把方法细分得过多,仔细想想你真正打算重用的是哪些代码?v尽量采用大量的 PHP 内置函数。v如果在代码中存在大量耗时的函数,你可以考虑用 C 扩展的方式实现它们。v评估检验(profile)你的代码。检验器会告诉你,代码的哪些部分消耗了多少时间。Xdebug 调试器包含了检验程序,评估检验总体上可以显示出代码的瓶颈。vmod_zip 可作为 Apache 模块,用来即时压缩你的数据,并可让数据传输量降低 80%。v我想要完成的任何事情 使用优化工具优化代码vzend optimizer工具的使用页面文件压缩输出vHtml页面、JavaScript、CSS文件压缩输出v使用Apache2的mod_deflate模块MySql缓存优化配置v使用动态缓存v使用静态缓存v使用缓存工具eAccelerator、APC、Zend platform for performance suite等vPhp函数库预先读到缓存中数据库优化v索引vISAM类型的表改为MyISAMv合理使用范式v用固定的表格式创建表v存储过程的使用结束语谢谢!
展开阅读全文