我是PHP的新手,很想听听我的代码是多么安全(如果它完全安全?)以及如何改进它,我的代码可以在下面找到:
<?php
include('header.php');
if (!$is_online) {
redirect('index.php');
exit;
}
?>
<div class="content">
<h2 class="title">Level</h2>
<?
$today_clicks = $db->QueryFetchArray("SELECT SUM(`today_clicks`) AS `clicks` FROM `user_clicks` WHERE `uid`='".$data['id']."'");
$pack['coins'] = 60;
$pack['level'] = 1;
if($data['level_reward_claimed']*100 <= ($today_clicks['clicks'])) {
$db->Query("UPDATE `users` SET `coins`=`coins`+'".$pack['coins']."' WHERE `id`='".$data['id']."'");
$db->Query("UPDATE `users` SET `level`=`level`+'".$pack['level']."' WHERE `id`='".$data['id']."'");
$db->Query("UPDATE `users` SET `level_reward_claimed`=`level_reward_claimed`+'".$pack['level']."' WHERE `id`='".$data['id']."'");
?>
<div class="msg"><div class="success">100 points added and level increased!</div>
<?
}
else {?>
<div class="msg"><div class="error">You need more clicks!</div></div>
<?}?>
</div>
答案 0 :(得分:1)
我假设数组$data
填充在header.php中。如果它是用户提供的参数,则这些查询对sql注入非常不安全。
从技术上讲,如果$data
是一个数组,你手动填充元素$data['id']
,那么从sql的角度来看并不安全 - 只要没有人将$data['id']
设置为用户提供的数据
您应该为参数中的所有分配或使用的数据使用预准备语句。
我建议您通过手动尝试引用并自行转义数据来避免尝试使提供的数据“安全”。使用预备陈述。期。我不知道你正在使用什么数据库抽象库,所以我不能再具体了。