2012-04-11 67 views
2

我有很多具有的东西像安全性添加到不安全的PHP MySQL的脚本半自动地

1- mysql_query("update ... $_POST['foo'] ..."); 

文件我想改变的是对这个

2- $foo = mysql_real_escape_string($_POST['foo']); 
3- mysql_query("update ... $foo ..."); 

我有想法,打开每个文件,选择文本$_POST['foo'](表格1-)按下一个组合键,然后自动执行一些工具:

  • 放在我的剪贴板上d mysql_real_escape_string($_POST['foo']);(在2-相加)
  • 与文本替换在文本中的1- 3-

然后手动编写$foo =并按下Ctrl + v至产生2-

我尝试使用notepad ++和一个名为fingertext的插件,并尝试制作一个宏,但没有成功。

有什么建议吗?

+1

这个问题的声音只适用于某种文本编辑器或宏。 – 2012-04-11 21:05:01

+0

我愿意使用任何解决方案,但更喜欢使用一些文本编辑器或宏,如你所说(不仅记事本++,不仅窗口,而且还有Linux) – jperelli 2012-04-11 21:08:55

回答

3
$_POST = sanitize($_POST); 
$_GET = sanitize($_GET); 

    function sanitize($input) { 
     if (is_array($input)) { 
      foreach($input as $var=>$val) { 
       $output[$var] = sanitize($val); 
      } 
     } else { 
      if (get_magic_quotes_gpc()) { 
       $input = stripslashes($input); 
      } 
      $output = mysql_real_escape_string($input); 
     } 
     return $output; 
    } 

它并不完美,但如果你有很多不安全的网页,需要速战速决,使他们所有的安全,你可以连接到MySQL后,把这个。另外,请记住,如果您的查询具有未加引号的数字变量,则必须验证它们是数字,还是在将查询用于查询之前先进行类型转换。 mysql_real_escape_string()仅适用于引用值(即blah_column ='value',但不是blah_column = value)。

+0

很好。如果里面的变量不是字符串而是int,那么只有一个问题。我想它可以使用一些强制转换+异常机制。我会尝试编辑 – jperelli 2012-04-11 21:16:42

2

用手替换它们。如果你关心安全性,不要使自动更换。并且至少要制作一个功能而不是mysql_real_escape_string((),请使用它。

//just for example, better can be written 
function db_escape($var, $type = 'string') 
{ 
    if($type == 'string') return mysql_real_escape_string($var); 
    if($type == 'integer') return (int) $var; 
    if($type == 'float') return (float) $var; 
} 
+0

为什么我需要该功能?你打算为了更好的可维护性吗? – jperelli 2012-04-11 21:12:14

+0

@jperelli就是其中的例子。你可以写出更好的一个。 – safarov 2012-04-11 21:15:07