我是PHP新手,几天前我接受了采访。他们给了我一个PHP代码来找出错误和错误的编程实践。我已经指出了一些错误和不良做法。但我不确定代码中的所有错误。你能帮我找出确切的答案,所以我可以在接下来的采访中提高答案。
我的建议是:
这是代码
<?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>";
}
?>
答案 0 :(得分:0)
更多想法:
$_GET['id']
不是一个好主意。你应该打电话给intval()
。$row['description']
输出不是一个好主意。你应该打电话给htmlspecialchars()
。$authorized=true;
在while循环的代码中设置,而不调用is_authorized()
include('/path/to/' . $_REQUEST['module'] . '.php');
。应该在循环外调用。也许,include_once()
是一个更好的主意。is_authorized()
返回false,也会执行整个代码。答案 1 :(得分:0)
我可以在该列表中添加更多内容:
$_REQUEST
include
的安全漏洞
$_GET
打开SQL注入作为一个自己采访过新PHP开发人员的人,我一直在寻找安全问题。
答案 2 :(得分:0)
$_REQUEST
,始终使用特定于方法的数组WHERE id != $id
也可以使用