首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在php代码中查找编码错误和错误的编码实践

在php代码中查找编码错误和错误的编码实践
EN

Stack Overflow用户
提问于 2014-03-31 09:06:21
回答 3查看 235关注 0票数 0

我是PHP新手,几天前我遇到了一次面试。他们给了我一个PHP代码来找出错误和错误的编程实践。我指出了一些错误和不良做法。但我不确定代码中的所有bug。你能帮我找出确切的答案吗?这样我就可以在下一次面试中改进我的答案了。

我的建议是:

  • 包括一个基于用户请求的外部PHP文件不是一个好做法
  • HTML与PHP混合使用,而不是使用MVC架构风格。
  • 在同一文件中写入连接查询
  • 未定义is_authorized()函数
  • 不推荐mysql_connect,可以使用mysqli

这是代码

代码语言:javascript
复制
<?php
function output()
{
// Check authorization
if(is_authorized())
{
$authorized = true;
include('/path/to/' . $_REQUEST['module'] . '.php');
}
    echo "<ul>";
    $conn = mysql_connect( "mysql.foo.org:324", "root", "root" );
    mysql_select_db( "conteol", $conn ); // selects a database
    $q = " SELECT * FROM main WHERE id > " . $_GET["id"]. ";";
    $res = mysql_query( $q, $conn);
    while( $row = mysql_fetch_assoc( $res ) )
    {
        echo "<li>".$row['description']."</li>";
    }
    echo "</ul><br><ul>";
    $q = " SELECT * FROM main WHERE id < " . $_GET["id"]. ";";
    $res = mysql_query( $q, $conn);
    while( $row = mysql_fetch_assoc( $res ) )
    {
    $authorized = true;
    include('/path/to/' . $_REQUEST['module'] . '.php');
    echo "<li>".$row['description']."</li>";
    // Display the status if it is authorized, othewise display N/A
    echo "<li>".$row['description']. "(" .
        $authorized ? $row['status'] : "N/A" . ")</li>";
    }
    echo "</ul>";
}
?>
EN

回答 3

Stack Overflow用户

发布于 2014-03-31 09:14:35

更多的想法:

  • 在SQL查询中直接使用$_GET['id']不是一个好主意。你应该打电话给intval()
  • 直接使用$row['description']进行输出不是一个好主意。你应该打电话给htmlspecialchars()
  • $authorized=true;在while循环中的代码中设置,而不调用is_authorized()
  • include('/path/to/' . $_REQUEST['module'] . '.php');在while循环中被调用。应该在循环之外调用。也许,include_once()是个更好的主意。
  • 即使is_authorized()返回false,也会执行整个代码。
票数 0
EN

Stack Overflow用户

发布于 2014-03-31 09:15:01

我可以在这份清单上再加几个:

  • 不良/不一致压痕
  • 不一致格式
  • 非描述变量名
  • $_REQUEST中使用include的安全漏洞
  • 在SQL查询中使用$_GET打开SQL注入

作为一个亲自为新的PHP开发人员面试过的人,这是我会一直在寻找的安全问题。

票数 0
EN

Stack Overflow用户

发布于 2014-03-31 09:15:27

  • 格式化/缩进是很糟糕的
  • 永远不要使用$_REQUEST,始终使用特定于方法的数组。
  • 没有mysql连接的错误检查
  • 无SQL注入保护
  • 不要使用包含,使用include_once
  • 对基本相同的检查进行双MYSQL查询:使用WHERE id != $id也可以
  • 第二个循环中的授权总是设置为true。
  • 为你无法访问的东西显示"N/A“是没有意义的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22757598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档