|
|
|
|
|
для: Unkind
(14.01.2008 в 14:12)
| | Спасибо, Unkind.
Буду разбираться... | |
|
|
|
|
|
|
|
для: EGORR
(14.01.2008 в 13:28)
| | Об этом написано довольно много. Так что говорить что это за уязвимость я не стану.
Скажу пару слов о способах правильной обработки данных.
Если режим magic_quotes_gpc включен, то надо исправить всё, что натворил этот механизм с входящими данными.
А данные перед вставкой в запрос нужно экранировать и обрамлять кавычками, кроме числовых значений, которые нужно (если нет проверок) принудительно приводить к integer/float.
<?php
function stripslashes_recursive($value)
{
if( is_array($value) )
{
$value = array_map('stripslashes_recursive', $value);
}
else
{
$value = stripslashes($value);
}
return $value;
}
if( get_magic_quotes_gpc() )
{
$_POST = stripslashes_recursive( $_POST ); //$_GET, $_COOKIE
}
// ...
$id = isset( $_POST['id'] ) ? (int) $_POST['id'] : 0;
// ...
$query = "UPDATE `faq` SET `question` = '" . mysql_escape_string($question) . "', `answer` = '" . mysql_escape_string($answer) . "' WHERE `id_faq` = " . $id . ";";
?>
|
| |
|
|
|
|
|
|
|
для: Unkind
(13.01.2008 в 21:23)
| | Unkind,
>SQL Injections< поясни, что имеешь в виду.
Я новичок... | |
|
|
|
|
|
|
|
для: jbs
(13.01.2008 в 18:10)
| | > <? echo $PHP_SELF; ?>
Неопределенная переменная
> if (!(strcmp("show", $row['hide'])))
Что за? Тут нужен просто оператор сравнения (==).
>$id = $_POST['id'];
>$question = $_POST['question'];
>$answer = $_POST['answer'];
>$hide = $_POST['hide'];
> $link = mysql_connect($dblocation,$dbuser,$dbpasswd);
> $db = mysql_select_db($dbname,$link);
> $query = "UPDATE faq SET question ='$question', answer ='$answer' WHERE id_faq ='$id'";
SQL Injections | |
|
|
|
|
|
|
|
для: jbs
(13.01.2008 в 18:10)
| | >id_faq= '$id'
Если у Вас $id должно быть числом, зачем нужны одинарные кавычки? | |
|
|
|
|
|
|
|
для: EGORR
(13.01.2008 в 18:22)
| | Спасибо!
Всё молотит!
Ура! | |
|
|
|
|
|
|
|
для: jbs
(13.01.2008 в 18:10)
| | Это я от полного отчаянья все возможные и невозможные варианты написания пробовал.
Убрал я эти точки.
Делал обработку mysql_real_escape_string-ом, trim-ом. Все бесполезно!
Не работает!....
Сейчас твою науку применю.
Спасибо, сенсей! | |
|
|
|
|
|
|
|
для: jbs
(13.01.2008 в 17:27)
| | и того:
<?php require_once('../../../www/config.php');
$id = intval($_GET['idfaq']);
$query = "SELECT * FROM faq WHERE id_faq= '$id'";
$result = mysql_query($query);
$row = mysql_fetch_array($result);
?>
<form action="<? echo $PHP_SELF; ?>" method="POST" style="margin:5px">
ID<br />
<input name="id" type="text" id="id" value="<?php echo $row['id_faq']; ?>" size="50" />
<br>
Вопрос<br />
<textarea name="question" cols="50" rows="3" id="question"><?php echo $row['question']; ?></textarea>
<br>Ответ<br />
<textarea name="answer"cols="50" rows="3" id="answer"><?php echo $row['answer']; ?></textarea>
<br>
Статус сообщения<br />
<select name="hide" id="hide">
<option value="show" <?php if (!(strcmp("show", $row['hide']))) {echo "selected=\"selected\"";} ?>>ВКЛЮЧЕН</option><option value="hide" <?php if (!(strcmp("hide", $row['hide']))) {echo "selected=\"selected\"";} ?>>ВЫКЛЮЧЕН</option>
</select>
<br /><br />
<input type="submit" name="faq_button" id="faqe_button" value="Изменить">
</form>
<?php
$id = $_POST['id'];
$question = $_POST['question'];
$answer = $_POST['answer'];
$hide = $_POST['hide'];
$link = mysql_connect($dblocation,$dbuser,$dbpasswd);
$db = mysql_select_db($dbname,$link);
$query = "UPDATE faq SET question ='$question', answer ='$answer' WHERE id_faq ='$id'";
$query_result = mysql_query($query, $link);
if(!$query_result )
die ("Невозможно выполнить: " .mysql_error());
echo "<h2>Запись обновлена ".mysql_affected_rows()."</h2>";
?>
|
даже проверил, работает | |
|
|
|
|
|
|
|
для: EGORR
(13.01.2008 в 15:50)
| | Выведи перед запросом в базу, значение $ID и ты увидеш что его нет.
а второй косяк в запросе, точки зачем-то понапихал.
$query = "UPDATE faq SET question ='$question', answer ='$answer' WHERE id_faq ='$id'";
|
| |
|
|
|
|
|
|
|
для: Trianon
(13.01.2008 в 14:21)
| | 2Trianon
Спасибо за совет.
Однако...
> Переменная $id , используемая в строке WHERE id_faq ='.$id.'"; должна брать (где-то раньше) свое значение из (вероятно) $_POST['id']
Совершенно справедливо. Только GET, а не POST. Может это служить причиной косяка? Я пробовал и POST, не помогло, но может я что-то не так делал...
> У Вас этого оператора ( $id = intval($_POST['id']); ) нет.
Этот оператор у меня в коде есть(см. цитату). Но ошибка остается.
> логическое разделение скрипта на ветвь, создающую форму, и ветвь, обрабатывающую post-запрос, в Вашем тексте практически отсутствует.
Я только начинаю осваивать PHP. Многих вещей не знаю. Учту. А как в данном конкретном коде это разделить?
Я считал, что код расположен логично, поэтапно:приходит с ГЕТом переменная, по ней идет запрос в БД, далее результат запроса раскладывается по формам, юзер правит, submit жмет, из полей данные идут в переменные, потом в БД...
В такой последовательности и код написан. Почему это худо? Как надо?
> Вы строку <option растянули на полкилометра специально , чтоб до кнопки "ответить" было "легче" дотягиваться?
Слышатся язвительные нотки... Нет, код написан нормально. Скопировалось так...
Так что же мне делать с этим UPDATE? Который день с ним бодаюсь.
Добавляю позже.
Сейчас средствами phpMyAdmin был сделан запрос.
UPDATE `faq` SET `question` = 'Какие новости?',
`answer` = 'Нет никаких новостей' WHERE `id_faq` = '44'
|
Без малейших замечаний. Ни один МуСкуL не дрогнул!
Значит ошибка в PHP! Круг сузился.
Проблему это не решает, но надежду дает! | |
|
|
|
|