Я следую this tutorial, чтобы попытаться создать скрипт проверки ключа PHP Form. По какой-то причине мой конструктор не создает значение для моей переменной $old_formKey
.Что-то не так с моей PHP-формой Класс ключа
В учебнике упоминается, что синглтоны более безопасны, но он не входит в реализацию. Я знаю основные принципы ООП с Java, но я мало знаю о Принципах ООП PHP. Я просто пытался взломать его, сделав переменные класса статическими - и я думаю, что это моя проблема. Однако, когда мой конструктор вызывается, он должен дать $old_formKey
значение $_POST[form_key]
«если Исеть()»
Я не в состоянии получить конструктор, чтобы поместить значение старого formKey в желаемом переменном пространстве.
Так вот, где у меня проблемы.
<?php
class formKey
{
private static $formKey;
private static $old_formKey;
public function validate()
{
echo $_POST['form_key'];
//We use the old formKey and not the new generated version
if($_POST['form_key'] == $old_formKey) {
//The key is valid, return true.
return true;
}
else {
//The key is invalid, return false.
return false;
}
}
}
?>
My formKey validation script выглядит примерно так.
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
//Validate the form key
if(!isset($_POST['form_key']) || !$formKey->validate()) {
//Form key is invalid, show an error
$error_msg = 'Security Error.';
$die = "die";
}
else {
/*continue validation*/
}
}
?>
Скрипт возвращает сообщение об ошибке, а затем выводит его, потому что $old_formKey
никогда не дается значение внутри метода validate()
.
По какой-то причине я не могу изменить переменную класса из метода validate()
. Извините, если это было рассмотрено ранее. Я честно посмотрел и не мог найти его!
function __construct()
{
//We need the previous key so we store it
if(isset($_SESSION['form_key']))
{
self::$old_formKey = $_SESSION['form_key'];
}
}
Извините, что забыл включить мой конструктор. Это было добавлено выше.
** 12 июн 2009 г. ** опасность любого учебного пособия в течение 7 лет должна быть опасно устаревшей –
Для реализации одноэлементной переменной вы должны использовать 'self', поскольку она статична. Вы также должны назначить его 'self :: $ old_formKey = 'whatever';' То же самое с '$ formKey'. При этом, даже если у вас есть это, вы не присвоили '$ old_formKey' какое-либо значение. – Rasclatt
Также вы говорите * «когда мой конструктор вызывается ...» *, вы имеете в виду '__construct()'? Если это так, у вас его нет, по крайней мере, из приведенного вами примера. – Rasclatt