我仍然对消毒字符串感到困惑

时间:2011-06-05 01:46:00

标签: php odbc sql-injection quotes

我正在为内联网编码。从理论上讲,我不必过多担心SQL注入(我可以看到你已经把你的手放在恐惧之中;-)这不是一个真正的安全app&没有任何“秘密的东西”。

我更关心存储和检索包含引号的字符串。

它必须使用ODBC函数(从高处开始订购)。

1)执行命令时addslashes()和检索它们时stripslashes()是否足够?

2)我知道哪个输入可能包含引号&不是(例如,某些形式的输入字段需要数字输入a被验证,因此,如果它们将被写入d / b,则它们被称为没有引号)

但是,我确实拥有OdbcExec()odbc_fetch_row()的核心功能,然后提取命名列的值。

为什么我应该在那些中添加/ strip-slashes?

如果你仍然使用OSBC功能可以使它更安全,那么一定要这样做。我在开发的早期阶段主要关心的是在输入包含引号的字符串时防止崩溃。 1或2个中心功能对我来说似乎最好,但也许你会更好。

感谢您澄清

1 个答案:

答案 0 :(得分:3)

使用参数化查询/语句。 odbc准备和执行功能为您提供如下功能:

<?php
  $a = $_GET['a'];
  $stmt = odbc_prepare($db_conn, "SELECT b FROM c WHERE a=?");
  $res = odbc_execute($stmt, array($a));
?>

关于开始和结束/单引号的参数有一些限制,请参见此处:

http://php.net/manual/en/function.odbc-execute.php

在将输入放入数据库之前尽可能验证输入,并使用参数化查询,您将开始营业。