Представлен (http://typo3.org/news/article/typo3-cms-4540-released/) внеплановый выпуск системы управления контентом TYPO3 4.5.40 (http://typo3.org/) в котором устранена критическая уязвимость (https://typo3.org/teams/security/security-bulletins/typo3-co.../), позволяющая обойти систему аутентификации и выполнить вход, зная лишь логин пользователя. Проблема проявляется только при аутентификации по ключам RSA, обеспечиваемой компонентом rsaauth.URL: http://typo3.org/news/article/typo3-cms-4540-released/
Новость: http://www.opennet.me/opennews/art.shtml?num=41691
В патче только:- if (parent::authUser($userRecord)) {
+ if (is_bool($checkResult = parent::authUser($userRecord)) && $checkResult) {- if (!empty($this->login['uident_text'])) {
+ if ((string)$this->login['uident_text'] !== '') {
- if ($this->login['uident'] && $this->login['uname']) {
+ if ((string)$this->login['uident'] !== '' && $this->login['uname']) {
не понял, в чём подвох? чем проверка через empty плоха?
В похапэ empty("0") тоже считается false.
...сам патч не смотрел, но думаю истина где-то недалеко.
Вы опечатались:s/false/true/
в "if ($this->login['uident'] &&..." тоже на ноль в $this->login['uident'] сработает. Через $this->login['uident'] передаётся введённый пароль. Проблема заявлена только в rsaauth, но при проверке обычных паролей логика та же - сперва выставляют флаг успешной аутентификации и только потом проверяют пароль и сбрасывают этот флаг.diff --git a/typo3/sysext/saltedpasswords/sv1/class.tx_saltedpasswords_sv1.php b/typo3/sysext/saltedpasswords/sv1/class.tx_saltedpasswords_sv1.php
index 7137664..4e05126 100644
--- a/typo3/sysext/saltedpasswords/sv1/class.tx_saltedpasswords_sv1.php
+++ b/typo3/sysext/saltedpasswords/sv1/class.tx_saltedpasswords_sv1.php
@@ -237,7 +237,7 @@ class tx_saltedpasswords_sv1 extends tx_sv_authbase {
}
if ($this->login['uident'] && $this->login['uname']) {
- if (!empty($this->login['uident_text'])) {
+ if ((string)$this->login['uident_text'] !== '') {
$validPasswd = $this->compareUident(
$user,
$this->login
diff --git a/typo3/sysext/sv/class.tx_sv_auth.php b/typo3/sysext/sv/class.tx_sv_auth.php
index f974cdc..8f026ec 100644
--- a/typo3/sysext/sv/class.tx_sv_auth.php
+++ b/typo3/sysext/sv/class.tx_sv_auth.php
@@ -125,7 +125,7 @@ class tx_sv_auth extends tx_sv_authbase {
public function authUser(array $user) {
$OK = 100;
- if ($this->login['uident'] && $this->login['uname']) {
+ if ((string)$this->login['uident'] !== '' && $this->login['uname']) {
// Checking password match for user:
$OK = $this->compareUident($user, $this->login);
> Проблема проявляется только при аутентификации по ключам RSA,
> обеспечиваемой компонентом rsaauth....для felogin (возможность редактирования сайта "с лица" при осуществлении входа в административную часть), который тоже отключен по умолчанию. Но всё равно неприятно.
Оно ведь на php? Тогда всё понятно.
а если такая же логика работы будет на C или C++ тогда что вам понятно станет?
Пыхпых для вебсайта... А Си++ это такой же пыхпых, только для ОС.
Лажа вроде чисто алгоритмическая. Какая разница на чем она будет сделана? Хоть на брейнфаке.Там скорее "опять TYPO3?!". В смысле это типа, типо по жизни имело очень таксебешный уровень безопасности.
Не совсем алгоритмическая. Тут именно особенность PHP, на которую, очевидно, нарвался человек, перешедший с другого языка. Документированная, но от этого не легче. Название функции "empty(str)" явно вводит в заблуждение.
> В смысле это типа, типо по жизни имело очень таксебешный уровень безопасности.Отнюдь, заметно лучше среднего в своём классе.
Очевидно разработчики не знают об автоматизированном тестировании
> Очевидно разработчики не знают об автоматизированном тестированииОчевидно что некоторые макаки думают что автоматизированное тестирование заменяет головной мозг и разработчикам и тестировщикам. А это совсем не так.
Пардон, но ведь недопиленному автоматизированному тестировани, разве не ущербный головной мозг виной его написавшего?