PHP 对输入过滤是不是 htmlspecialchars 就够了? (不考虑 SQL 注入, PDO prepare 已经解决)
安全编码方面,SQL 注入由 PDO prepare 来解决, 是不是 防范安全方面,XSS 攻击什么的,是不是用 htmlspecialchars 就够了?
比如对 $_GET 的处理:
function get($name){
return htmlspecialchars($_GET["$name"]);
}
这样处理后,还会有什么输入的漏洞吗? 还是说强制转 string 什么的更安全呢?
----------------------- 以下是精选回复-----------------------
答:xss
答:这是很糟糕的做法,除了 htmlspecialchars,还得有 xml_specialchars,regex_specialchars,database_specialchars 等等,在入口处统一过滤或者转义,是简单粗暴很 low 的做法,它在让你丢失原始数据的同时,并没有真正避开危险。
答:Pdo prepare 的预处理完全能避免 sql 攻击
htmlspecialchars 用于将显示的时候转义实体字符避免 xss
附上一篇关于 pdo 预处理为什么能防止 sql 攻击的文章
http://www.cnblogs.com/LoveJenny/archive/2013/01/15/2860553.html
答:是的,肯定够了。但是我们还是有需求保留安全的 html 文本,比如不把图片 img 标签给过滤掉,而对有危险的比如 script 标签、onclick 属性文本过滤,而不是一刀切全部干掉。
答: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)也是安全的
答:a.输入过滤是错误的做法,正确的做法是在输出的时候按照不同的位置进行相应的合适的处理(不仅限于后端)
b.htmlspecialchars 不带参数的时候仅适用于 html 标签内容
c.prepare 的问题#13 基本讲了
d.常见的还需要覆盖的有 csrf、cookie 的种种安全问题,session 的种种安全问题,密码安全等
e.你得先知道怎么攻击才能真正知道怎么防御,很多程序员的问题在于,说起安全都能说要做 123 (当然楼主连 123 都没说对说全),但为啥要做,不做会被怎么攻击都讲不清楚,这就有很大风险会导致作出徒有其表的防御
f.要讲安全,建议先通读 owasp cheatsheet 系列
答:听说自带的那个过滤的不严
答:自我觉得完全够用。在全部的地方过滤即可。
当你不需要原始数据时,你可以过滤后放入,对性能优。
当你需要原始数据时,你可以取出后过滤输出。
答:防注入,pdo 的 prepare 足矣,不用做其他处理
防 xss,是在把用户输入的内容渲染到 html 的时候要转义
网站模板库 » PHP 对输入过滤是不是 htmlspecialchars 就够了? (不考虑 SQL 注入, PDO prepare 已经解决)
0条评论