Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 这个功能安全吗?_Php_Security - Fatal编程技术网

Php 这个功能安全吗?

Php 这个功能安全吗?,php,security,Php,Security,付钱给某人做安全工作,他们说这是安全的,所以想和你们核实一下: function mysql_prep( $value ) { $magic_quotes_active = get_magic_quotes_gpc(); $new_enough_php = function_exists( "mysql_real_escape_string" ); // i.e. PHP >= v4.3.0 if( $new_enough_php ) { // PHP v4.3.0 or

付钱给某人做安全工作,他们说这是安全的,所以想和你们核实一下:

function mysql_prep( $value ) {
  $magic_quotes_active = get_magic_quotes_gpc();
  $new_enough_php = function_exists( "mysql_real_escape_string" ); 
  // i.e. PHP >= v4.3.0
  if( $new_enough_php ) { // PHP v4.3.0 or higher
    // undo any magic quote effects so mysql_real_escape_string can do the work
    if( $magic_quotes_active ) { $value = stripslashes( $value ); }
    $value = mysql_real_escape_string( $value );
  } else { // before PHP v4.3.0
    // if magic quotes aren't already on then add slashes manually
    if( !$magic_quotes_active ) { $value = addslashes( $value ); }
    // if magic quotes are active, then the slashes already exist
  }
  return $value;
} 

老实说。。。我建议您进入下一个层次,跳过mysql_uu库,选择数据库抽象层,比如PDO,并使用准备好的语句。你会有很多新功能可以使用,你的生活会更简单、更快、更好、更强


是的,上述功能是安全的。但可以修改,我高度怀疑你有一个版本少于5。但它确实很老了……老实说。。。我建议您进入下一个层次,跳过mysql_uu库,选择数据库抽象层,比如PDO,并使用准备好的语句。你会有很多新功能可以使用,你的生活会更简单、更快、更好、更强


是的,上述功能是安全的。但可以修改,我高度怀疑你有一个版本少于5。但是它确实很旧了。

在我看来很好-只要确保它们在SQL查询中使用单引号括起它们的值,因为仅用
mysql\u real\u escape\u string
是不够的

例如,而不是:

"SELECT Forename FROM users WHERE userID = $user_id;"
应该是:

"SELECT Forename FROM users WHERE userID = '$user_id';"

这是假设已使用该函数对
$user\u id
进行了转义。

在我看来很好-只要确保它们在SQL查询中的值周围使用单引号,因为仅使用
mysql\u real\u escape\u string
是不够的

例如,而不是:

"SELECT Forename FROM users WHERE userID = $user_id;"
应该是:

"SELECT Forename FROM users WHERE userID = '$user_id';"
这是假设已使用该函数转义了
$user\u id

您应该使用该函数,它为您提供了准备好的语句,并且不再需要手动转义字符串

另外,如果您需要多次执行同一查询(使用不同的参数),则准备语句的速度要快得多。

您应该使用它提供准备好的语句,并且不需要手动转义字符串


此外,如果需要多次执行同一查询(使用不同的参数),则准备语句的速度要快得多。

此函数混合了两种不同的关注点:

  • 在无法控制魔术引号的环境中规范化输入值
  • 转义sql参数
输入转义的撤消应该在代码开头的单个函数中完成。或者,如果您控制环境,只需禁用魔法引号

SQL转义应该发生在形成查询的地方。或者更好地使用预先准备好的语句或类似的机制,您根本不需要手动转义参数


这种担忧的混合导致了奇怪的效果:


如果您有来自请求的用户创建的数据,以及来自其他来源的不受信任的数据,则需要对它们进行不同的处理。否则,您可以在启用了魔引号的系统上设置安全漏洞。

此函数混合了两种不同的关注点:

  • 在无法控制魔术引号的环境中规范化输入值
  • 转义sql参数
输入转义的撤消应该在代码开头的单个函数中完成。或者,如果您控制环境,只需禁用魔法引号

SQL转义应该发生在形成查询的地方。或者更好地使用预先准备好的语句或类似的机制,您根本不需要手动转义参数


这种担忧的混合导致了奇怪的效果:


如果您有来自请求的用户创建的数据,以及来自其他来源的不受信任的数据,则需要对它们进行不同的处理。否则,您可以在启用了魔术引号的系统上设置一个安全漏洞。

为什么检查PHP 4.3.0-它是在2002年12月27日发布的。当使用与脚本不同的DB编码时,该代码对于利用多字节字符进行攻击是不安全的。为什么检查PHP 4.3.0-它是在2002年12月27日发布的。该代码对于攻击是不安全的使用与脚本不同的DB编码时利用多字节字符