[Help] Online Time Trade

Освен че променливата не е $_SESSION['user'] има и проблем със сигурността.
Давам веднага пример. Променливата, в която се записва името на героя е
PHP:
$char = stripslashes ($_POST['char']);
Който е използвал функцията stripslashes сигурно е мислил, че помага против sql injection, но истината е че не помага.
В конкретния скрипт може да се приложи тривиалния sql injection
Code:
'; drop table character --
За да се предотврати sql injection в конкретния случай трябва да се ескейпне специалния символ ' с функцията addslashes
И в крайна сметка кода трябва да изглежда по следния начин
PHP:
$char = addslashes($_POST['char']);
 
Освен че променливата не е $_SESSION['user'] има и проблем със сигурността.
Давам веднага пример. Променливата, в която се записва името на героя е
PHP:
$char = stripslashes ($_POST['char']);
Който е използвал функцията stripslashes сигурно е мислил, че помага против sql injection, но истината е че не помага.
В конкретния скрипт може да се приложи тривиалния sql injection
Code:
'; drop table character --
За да се предотврати sql injection в конкретния случай трябва да се ескейпне специалния символ ' с функцията addslashes
И в крайна сметка кода трябва да изглежда по следния начин
PHP:
$char = addslashes($_POST['char']);

И проблемите не свършат с това...
 
И проблемите не свършат с това...

абе на много знаещ се имаш бе мамаму стара скрита си работи както трябва ти ли ще ми казваш, че не е така сега проходил и почна да говори много
 
Първо не знаеш от кога се занимавам с това, че да ми казваш кога съм проходил и не! И второ скрипта който си дал наистина не е добър!

За пример... както казах:

използваш 6 заявки към sql-a при положение, че това може да стане с 3! Просто, явно хал хабер си нямаш от sql. Учил си ти нещо, но всичко което знаеш си го направил около едитването на готови уебове споделени тук или в други подобни форуми! Като за защита на написаното от мен само ще напиша JOIN OR INNER JOIN.

2ро... В скрипта който си дал те могат да разменят 1час за 2 кредита... Кажи кой луд ще тръгне да разменя 600часа игра за 1200 креди с 600 клика? Като можеше просто да им направиш една форма в която да напишат колко часа да разменят.

3то... Защитата на скрипта ти наистина е... И в крайна сметка не смятам да продължавам да ти обяснявам, защото ако до сега не си се научил - не смятам аз да го правя това ;)


А колкото до това аз какво мога.. Който ме познава знае какво мога и колко!, а реших тук да не споделям скрипт който половината от четящите темата няма да знаят какво прави, но ще го използват... и по тази причина им написах по-горе коментар с напътствия как да си го направят сами.

Успех, колега!
 
Last edited:
Не сесията ти е проблема..., до колкото видях в hanuka web-a сесията си е такава, но в скрипта даден от колегата проблема е изброяването на героите..

PHP:
<form method='post'>
<input type="text" name="broi" placeholder="Value">
<input type='submit' name='exchange' value='exchange Hours'>
</form>
<?
if(isset($_POST['exchange'])) {
$login = addslashes(htmlspecialchars($_SESSION['user']));
$broi = addslashes(htmlspecialchars($_POST['broi']));

$credits = 2; // kolko credita da dava na 1 4as razmqna
$minutes = $broi * 60;
$cred = $broi * $credits;

$check = mssql_query("SELECT memb___id,TotalTime,ConnectStat FROM MEMB_STAT WHERE memb___id='".$login."'"); 
$checked = mssql_fetch_assoc($check);

if (empty($broi)) { echo "Please fill all field or use only digits!"; $error=1; }
elseif (ereg('[^0-9]', $broi)) { echo "Please use only digits!"; $error=1; }
elseif ($checked['ConnectStat'] != 0){ echo "Account is online, must be logged off!"; $error=1; }
elseif ($checked['TotalTime'] < $minutes){ echo "$login need <b>$minutes</b> minutes to Trade Time!"; $error=1; }

if ($error !=1) {
mssql_query("UPDATE MEMB_STAT SET [TotalTime]=[TotalTime]-'$minutes' WHERE [memb___id]='$login'");
mssql_query("UPDATE memb_credits SET [credits]=credits+$cred WHERE memb___id='$login'");
echo "<b>$char</b> successfully traded $broi Hours and win $cred Credits!<br />";
} 
}
?>



Не е тестван, но би трябвало да работи
 
Last edited:
Не сесията ти е проблема..., до колкото видях в hanuka web-a сесията си е такава, но в скрипта даден от колегата проблема е изброяването на героите..

PHP:
<form method='post'>
<input type="text" name="broi" placeholder="Value">
<input type='submit' name='exchange' value='exchange Hours'>
</form>
<?
if(isset($_POST['exchange'])) {
$login = addslashes(htmlspecialchars($_SESSION['user']));
$broi = addslashes(htmlspecialchars($_POST['broi']));

$credits = 2; // kolko credita da dava na 1 4as razmqna
$minutes = $broi * 60;
$cred = $broi * $credits;

$check = mssql_query("SELECT memb___id,TotalTime,ConnectStat FROM MEMB_STAT WHERE memb___id='".$login."'"); 
$checked = mssql_fetch_assoc($check);

if (empty($broi)) { echo "Please fill all field or use only digits!"; $error=1; }
elseif (ereg('[^0-9]', $broi)) { echo "Please use only digits!"; $error=1; }
elseif ($checked['ConnectStat'] != 0){ echo "Account is online, must be logged off!"; $error=1; }
elseif ($checked['TotalTime'] < $minutes){ echo "$login need <b>$minutes</b> minutes to Trade Time!"; $error=1; }

if ($error !=1) {
mssql_query("UPDATE MEMB_STAT SET [TotalTime]=[TotalTime]-'$minutes' WHERE [memb___id]='$login'");
mssql_query("UPDATE memb_credits SET [credits]=credits+$cred WHERE memb___id='$login'");
echo "<b>$char</b> successfully traded $broi Hours and win $cred Credits!<br />";
} 
}
?>



Не е тестван, но би трябвало да работи

Благодаря ти за труда , но сега проблема е че недобавя кредитите в уебмагазина?
 
Не знам какви са таблиците на уеб магазина ви и колоната за кредитите