PHP和SQL Server,如何使其安全?

PHP和SQL Server,如何使其安全?,php,sql-server,lamp,Php,Sql Server,Lamp,我正在使用它从LAMP环境连接到SQL Server。我注意到我没有像prepared语句和real_escape_字符串这样的neet函数 如何使查询尽可能安全?感谢您的帮助 不要建议我使用ODBC或PDO,我没有这个选项。我必须用我所拥有的运行,这就是MSSQL $con = mssql_connect ('xxx', 'xxx', 'xxx'); mssql_select_db('xxx', $con); $qry = "SELECT firstname

我正在使用它从LAMP环境连接到SQL Server。我注意到我没有像prepared语句和real_escape_字符串这样的neet函数

如何使查询尽可能安全?感谢您的帮助

不要建议我使用ODBC或PDO,我没有这个选项。我必须用我所拥有的运行,这就是MSSQL

$con = mssql_connect ('xxx', 'xxx', 'xxx');

mssql_select_db('xxx', $con);

$qry = "SELECT 
            firstname
    FROM 
            person
    where firstname = '{$firstname}'";

$query = mssql_query($qry, $con);

Mssql不提供用于逃避查询的函数。一种选择是使用“addslashes()”,尽管它有点难看(并且不包含所有内容)


这可能会有帮助:

Mssql不提供逃避查询的函数。一种选择是使用“addslashes()”,尽管它有点难看(并且不包含所有内容)


这可能会有帮助:

不要使用文字,请使用参数并将其用于查询:

$con = mssql_connect ('xxx', 'xxx', 'xxx');
mssql_select_db('xxx', $con);
$qry = 'SELECT firstname
     FROM person
    where firstname = @firstname';
mssql_bind ($qry, '@firstname', $firstname, SQLVARCHAR);
$query = mssql_query($qry, $con);

不要使用文字,请使用参数并将其用于查询:

$con = mssql_connect ('xxx', 'xxx', 'xxx');
mssql_select_db('xxx', $con);
$qry = 'SELECT firstname
     FROM person
    where firstname = @firstname';
mssql_bind ($qry, '@firstname', $firstname, SQLVARCHAR);
$query = mssql_query($qry, $con);

文档是您的朋友。


文档是您的朋友。

您可以使用
htmlentities()
将html元素转换为html实体,此函数接受用于转义单引号和双引号的第三个参数

这是函数的签名:

string htmlentities ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )
以及第二个参数可能采用的参数:

ENT\u COMPAT将转换双引号,而不使用单引号

ENT\u引号将转换双引号和单引号

ENT\u NOQUOTES将保留双引号和单引号未转换

ENT\u IGNORE以静默方式放弃无效的代码单元序列,而不是返回空字符串。在PHP5.3.0中添加。这是为了向后兼容而提供的;避免使用它,因为它可能会带来安全隐患

您只需将
addslashes()
htmlentities()配合使用即可

还有另一个函数,用于从字段中清除html标记,即
filter\u var()
,例如:

$return\u value=
filter\u var($data\u to\u be\u filter,filter\u SANITIZE\u STRING)

重要

不要忘记检查是否启用了magic_引号。你可以写下:

if(get_magic_quotes_gpc())
    //do something
有关magic_quotes的更多信息:

编辑:

您可以通过使用准备好的语句来执行更安全的事务。它们阻止SQL注入

示例代码:


您可以使用
htmlentities()
将html元素转换为html实体,此函数接受用于转义单引号和双引号的第三个参数

这是函数的签名:

string htmlentities ( string $string [, int $flags = ENT_COMPAT [, string $charset [, bool $double_encode = true ]]] )
以及第二个参数可能采用的参数:

ENT\u COMPAT将转换双引号,而不使用单引号

ENT\u引号将转换双引号和单引号

ENT\u NOQUOTES将保留双引号和单引号未转换

ENT\u IGNORE以静默方式放弃无效的代码单元序列,而不是返回空字符串。在PHP5.3.0中添加。这是为了向后兼容而提供的;避免使用它,因为它可能会带来安全隐患

您只需将
addslashes()
htmlentities()配合使用即可

还有另一个函数,用于从字段中清除html标记,即
filter\u var()
,例如:

$return\u value=
filter\u var($data\u to\u be\u filter,filter\u SANITIZE\u STRING)

重要

不要忘记检查是否启用了magic_引号。你可以写下:

if(get_magic_quotes_gpc())
    //do something
有关magic_quotes的更多信息:

编辑:

您可以通过使用准备好的语句来执行更安全的事务。它们阻止SQL注入

示例代码:


这是如何使它更安全的呢?它阻止了SQL注入,这是SQL查询中您最大的恐惧。不幸的是,addslashes()充其量只是解决方案的一半(正如此人在其他帮助论坛中已经被告知的)。打破addslashes()很简单。对不起,克里斯,我是想强调维克的观点,而不是贬低你的答案。:)实际上,有一个函数返回带斜杠的带引号的字符串。请检查本机mySQL函数:这如何使其更安全?它防止SQL注入,这是SQL查询中您最大的恐惧。不幸的是,addslashes()充其量只是解决方案的一半(正如此人在其他帮助论坛中已经被告知的)。打破addslashes()很简单。对不起,克里斯,我是想强调维克的观点,而不是贬低你的答案。:)实际上,有一个函数返回带斜杠的带引号的字符串。请检查本机mySQL函数:@Kerrek:回答他的一些问题。@Kerrek:回答他的一些问题。根据文档,“mssql_bind-向存储过程或远程存储过程添加参数”…这在我的情况下不起作用,因为它不是存储过程。根据文档,“mssql_bind-将参数添加到存储过程或远程存储过程”…这在我的情况下不起作用,因为它不是存储过程。我确实阅读了文档,但找不到它。.mssql_bind仅用于存储过程。我确实阅读了文档,但找不到它。.mssql_bind仅用于存储过程。