2016-06-14 75 views
-2

我正在编写一个代码,用于处理注册表单中的用户文本输入。我已实现了以下功能,确保输入的数据是安全的:使用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; 
} 

有,我有,为了做到以确保输入是安全的任何其他处理?

我的意思是安全的恶意输入数据

+0

安全地做什么? –

+1

是的,有'base64_encode()'! –

+0

'base64_encode''非常好,我经常称之为'base_sexy_4_encoding'来分享我对这个美好functon的热爱':-)' – Martin

回答

1

你的战略,利用一切可能的逃逸机制可能是安全的,但会使你的应用程序太复杂 - 想象一下,你需要做的,使用的数据(这似乎稍后存储在MySQL数据库中,对吗?)稍后将其以HTML格式打印出来。

更明智的做法是,根据用途的数据的只使用足够逃逸机制:

  • 将数据存储在一个MySQL数据库,使用数据库逃逸机制(顺便说一句,而不是mysql_real_escape_string()它已过时,使用PDO::quote()甚至更​​好的使用parameter binding这已经没有逃脱你)
  • 打印在HTML文本中存储的数据使用htmlspecialchars(),可能连同strip_tags()
  • 打印在HTML属性存储数据使用htmlspecialchars()urlencode()

...等等。那么你很可能会安全的SQL注入,XSS攻击等。

+0

虽然这是一个很好的答案,但我建议在'htmlspecialchars'上使用'htmlentities',因为它是更完整(但这可能不是一个杀手)。 – Martin

+1

不,不要使用strip_tags,只是htmlspecialchars。并确保使用标志ENT_QUOTES | ENT_SUBSTITUTE | ENT_DISALLOWED – hanshenrik

+0

感谢每一位您的贡献。特别感谢Joachim Schirrmacher为您的时间扩展您的答案,这非常有帮助 –