Здравствуйте, я использовал поиск, прежде чем отправлять это.
Я новичок в php / mysql, делаю ооочень много чтения. смогли сделать игру, в которую играют несколько друзей. это как игра PvP.
Во всяком случае, один из людей, играющих, нашел способ сбить с толку покупку и продажу юнитов, поставив. перед значением. у меня есть функция защиты для удаления незаконных символов
function protect($string) {
return mysql_real_escape_string(strip_tags(addslashes($string)));
}
это работает для других персонажей, но не с. Я не прошу, чтобы кто-то сделал это для меня, просто хотел, чтобы меня указали в правильном направлении.
но просто кто-то спрашивает здесь код, который я использую
if(isset($_POST['buy'])){
$sword = protect($_POST['sword']);
$shield = protect($_POST['shield']);
$gold_needed = (10 * $sword) + (10 * $shield);
if($sword < 0 || $shield < 0){
output("You must buy a positive number of weapons!");
}elseif($stats['gold'] < $gold_needed){
output("You do not have enough gold!");
}else{
$weapon['sword'] += $sword;
$weapon['shield'] += $shield;
$update_weapons = mysql_query("UPDATE `weapon` SET
`sword`='".$weapon['sword']."',
`shield`='".$weapon['shield']."'
WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error());
$stats['gold'] -= $gold_needed;
$update_gold = mysql_query("UPDATE `stats` SET `gold`='".$stats['gold']."'
WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error());
include("update_stats.php");
output("You have bought weapons!");
}
Если бы кто-нибудь мог дать мне руку, я был бы очень признателен
я нашел что-то «строковые функции, substr replace и str replace»
но я могу использовать две функции в 1 запросе? извините, я новичок
РЕДАКТИРОВАТЬ***
Вот запрос, размещенный в update_stats
$update_stats = mysql_query("UPDATE `stats` SET
`income`='".$income."',`farming`='".$farming."',
`attack`='".$attack."',`defense`='".$defense."'
WHERE `id`='".$_SESSION['uid']."'") or die(mysql_error());
один из играющих людей нашел способ сбить с толку покупку и продажу юнитов, поставив a. перед значением
Ну, вы точно не раскрыли, в чем именно заключается уязвимость, но я рискну догадаться, что при вводе десятичного значения они влияют на вашу цену / математику? Итак, ряд возможностей, я должен подумать?
if (substr($string, 0, 1) == ".") {
//return false, warn, etc.
}
Это может пойти в вашей функции «защиты».
Аналогично, вы можете использовать intval () или даже is_numeric () … здесь я просто добавляю его в присваивание:
$sword = protect(intval($_POST['sword']));
Вы также можете играть с регулярным выражением. Я предполагаю, что $ value будет числовым? Сколько цифр макс? Я использовал 5:
if (preg_match("%\.\d{1,5}%", $sword)) { //this guy's playing w/us
die("Go away, bad hax0rz! :-P");
}
Других решений пока нет …