PHP和SQL Server,如何使其安全?
我正在使用它从LAMP环境连接到SQL Server。我注意到我没有像prepared语句和real_escape_字符串这样的neet函数 如何使查询尽可能安全?感谢您的帮助 不要建议我使用ODBC或PDO,我没有这个选项。我必须用我所拥有的运行,这就是MSSQLPHP和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
$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仅用于存储过程。