使用PHP进行安全输入数据处理
我正在编写一个代码,用于处理注册表单中的用户文本输入。我已实现了以下功能,确保输入的数据是安全的:使用PHP进行安全输入数据处理
function input_check($Indata, $dbc) { // input_check($Indata, $dbc)
$Indata = trim($Indata); // remove white spaces
$Indata = stripslashes($Indata); // remove back slashes
$Indata = strip_tags($Indata); // remove html tags
$Indata = htmlspecialchars($Indata); // convert html entities
$Indata = mysql_real_escape_string($Indata,$dbc);
return $Indata;
}
有,我有,为了做到以确保输入是安全的任何其他处理?
我的意思是安全的恶意输入数据
你的战略,利用一切可能的逃逸机制可能是安全的,但会使你的应用程序太复杂 - 想象一下,你需要做的,使用的数据(这似乎稍后存储在MySQL数据库中,对吗?)稍后将其以HTML格式打印出来。
更明智的做法是,根据用途的数据的只使用足够逃逸机制:
- 将数据存储在一个MySQL数据库,使用数据库逃逸机制(顺便说一句,而不是
mysql_real_escape_string()
它已过时,使用PDO::quote()甚至更好的使用parameter binding这已经没有逃脱你) - 打印在HTML文本中存储的数据使用
htmlspecialchars()
,可能连同strip_tags()
- 打印在HTML属性存储数据使用
htmlspecialchars()
与urlencode()
...等等。那么你很可能会安全的SQL注入,XSS攻击等。
虽然这是一个很好的答案,但我建议在'htmlspecialchars'上使用'htmlentities',因为它是更完整(但这可能不是一个杀手)。 – Martin
不,不要使用strip_tags,只是htmlspecialchars。并确保使用标志ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED – hanshenrik
感谢每一位您的贡献。特别感谢Joachim Schirrmacher为您的时间扩展您的答案,这非常有帮助 –
安全地做什么? –
是的,有'base64_encode()'! –
'base64_encode''非常好,我经常称之为'base_sexy_4_encoding'来分享我对这个美好functon的热爱':-)' – Martin