|  |      1oott123      2015-02-07 08:56:46 +08:00 via Android base64_encode 的意义在哪里? | 
|  |      2liuhaotian OP  5 @oott123 html代码不能简单过滤,但是我不知道怎么处理... 于是就base64了,这样没用的话,应该怎么防范,请指教0 0 | 
|  |      3iloveyou      2015-02-07 08:58:59 +08:00 防注入pdo参数绑定不就行了 | 
|  |      4oott123      2015-02-07 09:06:29 +08:00 via Android @liuhaotian HTML 代码过滤的最终目的是在展示的时候防止 xss 等安全问题,而不是防止在入库的时候被注入。 所以你要么用 htmlspecialchars 即根本不用富文本,要么用一些现成的 xss 过滤的库。 | 
|  |      5RIcter      2015-02-07 09:13:24 +08:00 via iPad 我审计过许多全局转义$_GET和$_POST的CMS,仍然能挖到注入(不要问我怎么挖的 | 
|  |      6mcfog      2015-02-07 09:26:15 +08:00 via Android mysql_escape_string名义上防注入,实际上换个角度看反而是注入的主要原因(拼接sql),在业务里用这个函数约等于存在/未来存在注入 **靠小心翼翼是防止不了漏洞的** | 
|  |      7lxrmido      2015-02-07 09:36:32 +08:00 如楼上所说的,base64解决不了富文本编辑的问题……还加大了检索难度 mysql_escape_string要连接mysql使用,还不如addslashes,而且mysql_系列函数已经废弃了 对于现在流行的注入方式,这两个措施其实都没啥用…… 还是统一处理一下输入输出或者PDO吧…… | 
|  |      8loveyu      2015-02-07 09:37:41 +08:00 pdo绑定参数就可以解决了,只是HTML的xss过滤没那么容易 | 
|  |      9lincanbin      2015-02-07 09:41:01 +08:00 via Android 别看那些十几年前出来的旧书了 Mysql是php中已经废弃的特性了,现在只用mysqli和Pdo了,既然用这两个,当然得用参数绑定来防止注入,这是我的一个支持where in 参数绑定的Pdo类。 https://github.com/lincanbin/PHP-PDO-MySQL-Class | 
|  |      10lincanbin      2015-02-07 09:45:50 +08:00 via Android 拼接字符串那种方法就算用函数过滤输入还是有局限性的,例如一些输入确实就有有用的引号,所以还是得用参数绑定,堵不如疏。 https://github.com/lincanbin/PHP-PDO-MySQL-Class/blob/master/README.md Preventing SQL Injection Attacks Safety: Use parameter binding method Safety Example: <?php $DB->query("SELECT * FROM fruit WHERE name=?", array($_GET['name'])); ?> Unsafety: Split joint SQL string Unsafety Example: <?php $DB->query("SELECT * FROM fruit WHERE name=".$_GET['name']); ?> | 
|  |      11aveline      2015-02-07 10:18:31 +08:00 拼接 SQL 是一个不好的习惯。 正确的姿势是使用 Prepared Statement。 | 
|      12kslr      2015-02-07 10:25:30 +08:00 PDO | 
|  |      14Moker      2015-02-07 10:35:29 +08:00 最近也在找SQL注入的相关资料,我发现前几天写的站,安全性基本处于0的情况,查询基本就是拼接,前端输入进行了限制 | 
|      15watsy0007      2015-02-07 10:42:46 +08:00 需求这么大,必然有处理好的第三方库。 另外,一般上了框架以后,用框架的绑定参数增删改查。 | 
|  |      18Moker      2015-02-07 11:18:44 +08:00 @lincanbin SQLSTATE[HY000] [1045] Access denied for user 'xxxxx'@'localhost' (using password: YES) 出现这样的问题,网上查过好像是说权限问题,我是本地测试的,检查过用户配置,发现权限没问题 | 
|  |      21icanfork      2015-02-07 11:29:44 +08:00 via Android 大把第三方的数据库轮子,用一个,他们考虑的多了很多 | 
|  |      22liuhaotian OP  4 @belin520 虽然不想重新造轮子,但是感觉这种东西如果自己懂了还是听有好处的。 @lincanbin 这个参数绑定只支持PDO还是同时支持MySQLi? 我在这里http://segmentfault.com/q/1010000000688197看到有人说参数绑定不如过滤?能否解释下 不是很懂。 @lincanbin MySQLi是不是PDO和MySQL之间的过渡,所以还是用PDO比较好? | 
|  |      24tabris17      2015-02-07 12:11:04 +08:00 不要手工拼接SQL语句,啥问题都解决了 | 
|  |      25lbp0200      2015-02-07 12:11:38 +08:00 绑定参数 | 
|  |      26lincanbin      2015-02-07 12:28:39 +08:00 @liuhaotian 只支持PDO,然后参数绑定是防御SQL注入的有效手段,用过滤引号之类的来防SQL注入再蠢不过了,不要信。 PDO主要是以后换数据库迁移会方便一些,例如以后不用MySQL了,换Oracle会方便些,另外PDO支持Dict型的参数绑定,比纯数组的要好用一些,在一些情境下。 | 
|  |      27liuhaotian OP  4 @lincanbin $result = $DB -> query("SELECT * FROM `pcc_node` WHERE `show`=?",array('2')); 这样为啥直接卡死了。。。 | 
|  |      28taogogo      2015-02-07 17:16:52 +08:00 放着我来,专业web安全工程师手把手教你。。。 反注入:参数绑定、mysql_escape单字段过滤(需统一字符集,最好全都是utf8) 反xss:字符白名单、dom解析过滤、css白名单 | 
|  |      29taogogo      2015-02-07 17:17:16 +08:00 需要web安全测试或者培训的话可以联系我 |