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