zoukankan      html  css  js  c++  java
  • YIi 数据操作备注

    这里引用开发组话

    注意:Yii是不对$_GET或$_POST进行过滤的,因为这意味着不可逆的数据更改。Yii依赖于model的验证规则对数据进行验证及过滤。
    
    为了防止XSS和SQL injection攻击,应该完全避免直接在SQL和HTML里嵌入$_GET或$_POST变量。
    应该使用parameter binding和HTML encoding
    
      
    
    我提到了两个问题:一是SQL Injection攻击,一个是XSS攻击。
    
    对于前者,需要避免的是直接把用户输入嵌入到SQL里,例如:"SELECT * FROM tbl_user WHERE id={$_GET['id']}"。
    恶意用户可以让$_GET['id']等于"1; DELETE FROM tbl_user",这样就把所有的用户数据都删除了!非常危险!
    
    解决办法有好几种。最简单的就是用param binding,请阅读PHP PDO获得相关知识。如果知道id是整数,也可以先把输入强制为整数。或者如果id是字串,可以用CDbConnection::quoteValue()把输入加上引号。如果你用的是AR,那么save()函数自动会使用param binding。如果你用findAll()之类的函数,自己生成condition部分,那就要特别小心不要直接嵌入输入。
    
    XSS攻击主要是要避免直接显示用户的输入数据。例如echo $user->description(假设description的数据来自用户的输入)。恶意用户可以让id为一段js代码,使得其它用户查看该页面后隐式执行该代码,从而被恶意用户获得登录cookie等安全信息。
    
    解决办法很简单,就是用CHtml::encode()。如果输入是HTML,可以用CHtmlPurifier::purify()来过滤有害代码。 
    

      关于 表前缀的设置 

    在配置文件中 db 数组的 设置 tablePrefix的值  注意大小写,使用的时候 表名为 {{tbname}}

  • 相关阅读:
    第三百九十一、二、三、四、五、六、七天 how can I 坚持
    第三百九十天 how can I 坚持
    第三百八十九天 how can I 坚持
    POJ 1745:Divisibility 枚举某一状态的DP
    POJ 1502:MPI Maelstrom Dijkstra模板题
    POJ 1160:Post Office 邮局经典DP
    POJ 1062:昂贵的聘礼
    POJ 1125:Stockbroker Grapevine
    POJ 1236:Network of Schools
    POJ 2186:Popular Cows Tarjan模板题
  • 原文地址:https://www.cnblogs.com/yxbs/p/3587407.html
Copyright © 2011-2022 走看看