安全编码方面,SQL 注入由 PDO prepare 来解决, 是不是 防范安全方面,XSS 攻击什么的,是不是用 htmlspecialchars 就够了?
比如对 $_GET 的处理:
function get($name){
return htmlspecialchars($_GET["$name"]);
}
这样处理后,还会有什么输入的漏洞吗? 还是说强制转 string 什么的更安全呢?
1
xiaoyanbot OP xss
|
2
sagaxu 2017-05-20 13:40:25 +08:00
这是很糟糕的做法,除了 htmlspecialchars,还得有 xml_specialchars,regex_specialchars,database_specialchars 等等,在入口处统一过滤或者转义,是简单粗暴很 low 的做法,它在让你丢失原始数据的同时,并没有真正避开危险。
|
4
changwei 2017-05-20 13:50:23 +08:00 via Android
@sagaxu 都已经做了实体编码,xml 的尖括号也没用了,还怎么 xml 注入呢?有点好奇啊,正则表达式注入,这个场景很少见吧,一般不会把用户输入的字符串作为正则表达式带入吧。
|
5
aawei 2017-05-20 13:53:39 +08:00
@sagaxu 我一直以为在入口处做过处理就不会有问题,那请问一下这种做法简单粗暴,那有啥比较优雅的方式处理才能避免 SQL 注入和 xss 呢??
|
8
1762628386 2017-05-20 14:29:33 +08:00 via iPhone
@sagaxu 正解啊 保持原始数据
|
9
xiaoyanbot OP @sagaxu 按照消费方的方式去转义? 意思是不用处理,SQL 的时候,直接 prepare 解决; 在需要什么数据的时候,用 ( string ) 这种强制转义吗?
|
10
xiaoyanbot OP @sagaxu 已经做了 htmlspecialchars , 为什么还需要 xml_specialchars,regex_specialchars,database_specialchars
后面这三个,有什么是 htmlspecalchars 没有过滤掉的危险字符呢? 能帮忙举个例子吗? 谢谢 |
11
HYSS 2017-05-20 15:21:35 +08:00
Pdo prepare 的预处理完全能避免 sql 攻击
htmlspecialchars 用于将显示的时候转义实体字符避免 xss 附上一篇关于 pdo 预处理为什么能防止 sql 攻击的文章 http://www.cnblogs.com/LoveJenny/archive/2013/01/15/2860553.html |
12
zjsxwc 2017-05-20 15:21:43 +08:00
是的,肯定够了。但是我们还是有需求保留安全的 html 文本,比如不把图片 img 标签给过滤掉,而对有危险的比如 script 标签、onclick 属性文本过滤,而不是一刀切全部干掉。
|
13
shiji 2017-05-20 16:17:08 +08:00
PDO prepare 并不能百分百防止注入。
1. 要统一好整个网站,web 服务器,数据库的编码。 2. $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 要记得设置 3. 注意二级注入。比如用户把带危险的字符串先存进数据库,如果你想在另外一个 SQL 语句里 concat 或者直接拼接那个带危险的字符串,是可以注入的。 至于 XSS,: http://stackoverflow.com/questions/19584189/when-used-correctly-is-htmlspecialchars-sufficient-for-protection-against-all-x ajax 的话用.text(data)也是安全的 |
14
mcfog 2017-05-20 16:45:25 +08:00
a.输入过滤是错误的做法,正确的做法是在输出的时候按照不同的位置进行相应的合适的处理(不仅限于后端)
b.htmlspecialchars 不带参数的时候仅适用于 html 标签内容 c.prepare 的问题#13 基本讲了 d.常见的还需要覆盖的有 csrf、cookie 的种种安全问题,session 的种种安全问题,密码安全等 e.你得先知道怎么攻击才能真正知道怎么防御,很多程序员的问题在于,说起安全都能说要做 123 (当然楼主连 123 都没说对说全),但为啥要做,不做会被怎么攻击都讲不清楚,这就有很大风险会导致作出徒有其表的防御 f.要讲安全,建议先通读 owasp cheatsheet 系列 |
16
GoBeyond 2017-05-20 21:25:23 +08:00 via Android
听说自带的那个过滤的不严
|
17
lslqtz 2017-05-21 04:34:01 +08:00
自我觉得完全够用。在全部的地方过滤即可。
当你不需要原始数据时,你可以过滤后放入,对性能优。 当你需要原始数据时,你可以取出后过滤输出。 |
18
cszchen 2017-05-21 10:22:33 +08:00
防注入,pdo 的 prepare 足矣,不用做其他处理
防 xss,是在把用户输入的内容渲染到 html 的时候要转义 |