我有一个网站,我无法使用html_entities()或html_specialchars()来处理用户输入数据。相反,我添加了一个自定义函数,它最终是一个函数,它使用数组$ forbidden来清除所有不需要的字符的输入字符串。目前,由于sql-injection / browser劫持,我将'<','>',“'”视为不需要的字符。我的网站是用utf-8编码的 - 我是否必须为该数组添加更多字符,即在其他字符集中编码的字符'<'?
感谢您的帮助,
Maenny
答案 0 :(得分:1)
答案 1 :(得分:0)
你也应该逃避"
。它比'
更有害,因为您经常在"
中包含HTML属性。但是,你为什么不使用htmlspecialchars
来做这项工作?
Futhermore:对SQL和HTML使用一个转义函数是不好的。 HTML需要转义标签,而SQL则不需要。因此,如果您使用htmlspecialchars
进行HTML输出并使用PDO::quote
(或mysql_real_escape_string
或您正在使用的任何内容)进行SQL查询,那将是最好的。
但我知道(根据我自己的经验),在SQL查询中转义所有用户输入可能真的很烦人,有时候我根本不会逃避部分,因为我认为它们是“安全的”。但我相信我并不总是正确的。所以,最后我想确保我真的逃避在SQL查询中使用的所有变量,因此编写了一个小类来轻松完成这项工作:http://github.com/nikic/DB也许你想要使用某些东西也是类似的。
答案 2 :(得分:-1)
将此代码放入标题页。它可以防止PHP中的SQL注入攻击。
function clean_header($ string) { $ string = trim($ string);
//来自RFC 822:“字段正文可以由任何ASCII组成 //字符,CR或LF除外。“ if(strpos($ string,“\ n”)!== false){ $ string = substr($ string,0,strpos($ string,“\ n”)); } if(strpos($ string,“\ r”)!== false){ $ string = substr($ string,0,strpos($ string,“\ r”)); }
返回$ string; }