我想问一下如何在下面的代码中修复sql注入。我认为如果我是正确的,易受sql注入的代码。
$result = mysql_query("SELECT * FROM newsevent order by date DESC");
这是完整的代码。这个文件来自newsview.php?id = 200.Anybody可以从下面的代码中给出建议并解释为什么下面的代码容易受到tu sql注入。
<?php
$page="video";
require('include/header.php');
require('include/config.php');
session_start();
$result = mysql_query("SELECT * FROM newsevent order by date DESC");
?>
<section id="wrappermain">
<div class="wrapper">
<div class="gray-top"> </div>
<div class="content">
<h2>News and Events</h2>
<div id="video">
<?php
while($row = mysql_fetch_assoc($result))
{
$no+= 1;
$clk = $row['date'];
?>
<a class="h-cat" href = "newsview.php?id=<?php echo $row['id']; ?>"><?php echo $row['title']; ?></a> ( <a> <?php $date1 = $clk; $date2 = time(); require('include/timestamp.php'); ?> </a>)
<div class="vline">
<div class="v-img">
<a href = "newsview.php?id=<?php echo $row['id']; ?>"> <img src = "images/newsandevent/<?php echo $row['image']; ?>" style = "height: 150px; width: 250px;" /> </a>
</div>
<div class="v-des">
<?php echo substr($row['de'],0,225); ?><br/><span style="float:right;padding: 10px 0px;"> <a href = "newsview.php?id=<?php echo $row['id']; ?>"> Read more ... </a> </span>
</div>
</div>
<?php } ?>
</div>
<div class="right">
<div class="white-lt">
<div class="white-rt"></div>
<div class="white-m">
<strong></strong>
<div style="width: 150px;">
<?php $result = mysql_query("SELECT * FROM newslink order by id DESC");
while($row = mysql_fetch_assoc($result))
{
?>
<?php echo $row['de']; ?>
<?php } ?>
</div>
</div>
<div class="white-lb">
<div class="white-rb"></div>
</div>
</div>
</div>
</div>
<div class="gray-bot"> </div>
</div>
</section>
<?php
require('include/footer.php');
?>
答案 0 :(得分:1)
由于你没有在查询中输入任何输入,所以没有sql注入的问题。但是如果你在查询中使用任何数据(变量),那么你必须知道sql注入。
您可以使用prepared statements阻止sql注入。
这里使用的是SELECT * FROM newsevent order by date DESC
之类的查询。在这种情况下,没有变量传递给查询。所以查询中不会有任何修改。但是如果你使用这样的查询
SELECT * FROM newsevent order by date DESC where some_column = '$variable'
这里说$variable
是一个可以替换值的数据。所以你必须知道这里的sql注入。你也可以检查以下答案,这是sql注入情况下评价最高的答案
答案 1 :(得分:0)
在这种情况下,SQL注入不适用,因为您没有在SQL语句中插入用户数据。
但是,如果您的表数据是用户输入的,那么您的代码很容易受到PHP code injection的攻击。</ p>