zoukankan      html  css  js  c++  java
  • tp5商城

    记录几个要点:

    • 用户使用firbug伪造表单字段,比如伪造表单id字段,如何防止,tp5中好像没有。
    • xss攻击:使用htmlspecialchars() 会把img、p、等等合法标签过滤掉,想要有选择性过滤标签,使用htmlpurifier软件包,搜索htmlpurifier下载解压,把library放到项目目录中。如果是框架,那么把相关代码放在公共文件中生成一个函数,方便随时调用。
      /**
       * htmlpurifier 过滤js脚本 // 有选择性的过滤XSS --》 说明:性能非常低-》尽量少用
       */
      function removeXss($data) {
      //引入路径 根据具体位置设置,其他不需要改动
          require_once '../HtmlPurifier/HTMLPurifier.auto.php';
          $_clean_xss_config = HTMLPurifier_Config::createDefault();
          $_clean_xss_config->set('Core.Encoding', 'UTF-8');
          // 设置保留的标签
          $_clean_xss_config->set('HTML.Allowed', 'div,b,strong,i,em,a[href|title],ul,ol,li,p[style],br,span[style],img[width|height|alt|src]');
          $_clean_xss_config->set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
          $_clean_xss_config->set('HTML.TargetBlank', TRUE);
          $_clean_xss_obj = new HTMLPurifier($_clean_xss_config);
          return $_clean_xss_obj->purify($data);
      }
    • 商品生成缩略图:商品列表页需要把,商品详情页需要把,放大镜需要把,等等。所以在添加商品图片时,数据表中要有几个字段存放不同尺寸的图片。
    • 项目中图片的优化:1. 图片相关配置写在配置文件中;2. 图片路径不要写死,写在配置文件中; 3. 上传图片和图片处理的代码封装成一个函数。
      //图片配置
          'image'                  => [
              'maxSize'  => 1024*1024,
              'exts'     => array('jpg', 'jpeg', 'png', 'gif'),
              'rootPath' => '../public/uploads/',    //上传图片保存的路径,PHP使用的路径,它是硬盘上的路径,他的根目录是D:
              'viewPath' => '/public/uploads',       //显示图片时的路径,浏览器使用的路径,根目录是网站的根目录
          ],
      
      //在配置文件中写上这段代码,类似这种
    • 模拟并发量:使用Apache自带的ab.exe软件测试,需要先打开cmd,把ab.exe路径复制进cmd下运行。
      C:Usersfb>D:wampwwwwamp32bitswampinapacheapache2.4.18inab.exe  -c 10 -n 10 localhost/homework111/11js/mail.php
      //这是cmd里的命令

      -c: 并发量       -c 10      10个并发量;      -n   每个客户端请求数;  -n  10   10个并发总共请求10次。  后面的是PHP脚本路径。PHP代码如下:

      $db = @mysqli_connect('localhost', 'root', '', 'stu');
      mysqli_set_charset($db, 'utf8');
      $sql = "SELECT id from miaosha";
      
      // mysqli_query($db, 'LOCK TABLE miaosha WRITE'); //锁表
      $fp = fopen('form.html', 'r');  // 一定要在操作数据库表之前上锁
      flock($fp, LOCK_EX); //php  lock
      $r = mysqli_query($db, $sql);
      // var_dump($r);
      if($r && mysqli_num_rows($r)){
          $re = [];
          while($row = mysqli_fetch_assoc($r)){
              $re[] = $row['id'];
          }
      }
      if($re[0] > 0){
          $re[0]--;
          // echo 666;
          mysqli_query($db, 'UPDATE miaosha set id='.$re[0]);
      }
      // mysqli_query($db, 'UNLOCK TABLES');  //mysql释放锁,可以不写,脚本自动释放
      flock($fp, LOCK_UN);
      fclose($fp);
      mysqli_close($db);
      View Code

       并发下读取数据库,假设数据库有100件商品,甲乙两个人可能同时读到100,然后各买1件,修改数据库,这时修改后的数据库剩余99件,但实际应该剩余98件。这就是并发带来的问题。所以使用锁。

    • 用户在填写多个值的时候,使用逗号隔开,如果既有中文逗号,又有英文逗号,那么在分割字符串的时候肯定有问题,怎么办?-------------------------------》方法:在插入数据库之前把中文逗号转换为英文逗号,怎么做?---------》str_replace(',', ',', $str);函数将逗号转换。
  • 相关阅读:
    c#备忘知识点
    [置顶] IE6支持的滑动菜单栏
    摩斯电碼中英文对照表
    2013年5月15日星期三
    2013年5月9日星期四
    2013年5月12日16:20:43母亲节
    2013年5月8日星期三
    JS前端DOM中Range疑问
    2013年5月14日星期二
    2013年5月13日星期一
  • 原文地址:https://www.cnblogs.com/bneglect/p/11106234.html
Copyright © 2011-2022 走看看