404 при написании сообщения в форуме в 1.10.1

#16 1 февраля 2013 в 02:01
юзает) но форум еще не успел) напишите разработчику думаю он поправит быстро
#17 1 февраля 2013 в 06:52
Евгений, у меня 1.10 обновленная до 1.10.1, форум доработанный by lokanaft, форум очень активный, жалоб от пользователей нет, произвел описанные вами действия, проблем не было, 404 не вываливалось, протестил несколько раз. В целом сайт работает стабильно и гладко, без ошибок. Может проблема в сервере?
#18 1 февраля 2013 в 08:28
Май, потестите на чистой 1.10.1, без доработок. Я уже написал, где удалить создание токена, чтобы заработало написание в разных темах.
Тестил и на хостинге, и на денвере.
#19 1 февраля 2013 в 11:53
Евгений удалил как Вы писали в блоке «Выполняем действия»
  1. cmsUser::clearCsrfToken();
Это не решает проблемы, отвечать на тему конечно теперь можно, но "Быстрый ответ" не работает.
Тем более все забывают что я писал и о других багах на форуме

При переносе темы в другую категорию тоже вылезает еще одна бага, тема дублируется и их становиться две, причем обе не в рабочем состоянии. Вот такая беда. Пытаюсь удалить не удаляет. Только заходить в админку и удалять полностью категорию.

Третья бага с модулем вывода "Новости форума" смотрим с левой стороны rockrussia.ru/
ставил как угодно, перезаливал, ничего — информации вывода нет.

Вчера специально зашел и посмотрел у своих разных клиентов, которым ставил версию 1.10 у всех не работает точно также, хосты у всех разные, т.е. это проблема версии двига.

Славу богу я не ставил эту 1.10 или 1.10.1 на свой работающий проект, у меня там люди в день до 50 тем на форуме делают.
#20 1 февраля 2013 в 12:15
В файле /core/cms.php в:
  1. 3071 public static function validateForm(){
  2.  
  3. if(!@$_POST['csrf_token']) { return false; }
  4. if($_POST['csrf_token'] == cmsUser::getCsrfToken()) { return true; }
  5. return false;
  6.  
  7. }
Делаете так:
  1. public static function validateForm(){
  2. return true;
  3. }
#21 1 февраля 2013 в 12:16
Кстати тут идёт через POST получение, а где то я и через обычный cmsCore::request() (где и GET пройдёт) видел.
#22 1 февраля 2013 в 12:53

Май, потестите на чистой 1.10.1, без доработок

Евгений
Потестил на чистой 1.10.1, да, действительно 404 при отправке сообщения из второго окна, именно так как вы и описали.
#23 1 февраля 2013 в 12:57

При переносе темы в другую категорию тоже вылезает еще одна бага, тема дублируется и их становиться две, причем обе не в рабочем состоянии. Вот такая беда. Пытаюсь удалить не удаляет. Только заходить в админку и удалять полностью категорию.

arianfinist

Потестил на чистой, такой проблемы не обнаружилось, темы переносятся из категории в категорию корректно.

Третья бага с модулем вывода "Новости форума" смотрим с левой стороны rockrussia.ru/
ставил как угодно, перезаливал, ничего — информации вывода нет.

arianfinist

На чистой 1.10.1 вывод новостей форума в модуле работает нормально.
#24 2 февраля 2013 в 19:13

При переносе темы в другую категорию тоже вылезает еще одна бага, тема дублируется и их становиться две, причем обе не в рабочем состоянии. Вот такая беда. Пытаюсь удалить не удаляет. Только заходить в админку и удалять полностью категорию.

arianfinist
1.8 — 1.9 — 1.10 — 1.10.1 не наблюдаю.
#25 2 февраля 2013 в 19:39

При переносе темы в другую категорию тоже вылезает еще одна бага, тема дублируется и их становиться две, причем обе не в рабочем состоянии. Вот такая беда. Пытаюсь удалить не удаляет. Только заходить в админку и удалять полностью категорию.

arianfinist
1.6 — 1.7 — 1.8 — 1.9 — 1.10 — 1.10.1 тоже нету такого
#26 19 февраля 2013 в 11:14
Есть такая проблема, 1.10 — 1.10.1
#27 19 февраля 2013 в 11:33

1. Открываем форум, видим список тем. 2. Открываем одну тему из списка, во второй вкладке открываем вторую тему. 3. Отвечаем в первой. Все хорошо. 4. Пробуем ответить во второй — 404.

Евгений
Так оно и будет. Токен генерируется каждый раз новый когда открывается другая форма, замещая предыдущий токен.
#28 19 февраля 2013 в 11:45

Токен генерируется каждый раз новый когда открывается другая форма, замещая предыдущий токен.

Димитриус
вот как бы убрать это дело, т.к многие всеже предпочитают открывать сразу несколько тем.
#29 17 марта 2013 в 07:05
Ошибка есть!!! А разрабы то вкурсе???
#30 31 марта 2013 в 21:52
Есть не очень сложное решение (только для 404 ошибки при нескольких открытых вкладках).
Нужно модифицировать 2 файла.
1. /core/cms.php
строки 3063-3075
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. /**
  4.   * Проверяет значение сессии в POST и сравнивает с текущим
  5.   * @return bool
  6.   */
  7. public static function validateForm(){
  8.  
  9. if(!@$_POST['csrf_token']) { return false; }
  10. if($_POST['csrf_token'] == cmsUser::getCsrfToken()) { return true; }
  11. return false;
  12.  
  13. }
заменить/дополнить на
  1. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  3. /**
  4.   * Проверяет значение сессии в POST и сравнивает с текущим
  5.   * @return bool
  6.   */
  7. public static function validateForm(){
  8.  
  9. if(!@$_POST['csrf_token']) { return false; }
  10. //if($_POST['csrf_token'] == cmsUser::getCsrfToken()) { return true; }
  11. if(cmsUser::checkCsrfToken($_POST['csrf_token'] )) { return true; }
  12. return false;
  13.  
  14. }
  15. public static function generateRandomString($length = 32,$onlyDigitandAlfa = true) {
  16. $chars = 'abcdefghjiklmopqnrstuvwxyzACBDEFGIJHKLMNOPQRSUVWXTYZ0123456789';
  17. if (!$onlyDigitandAlfa) {
  18. $chars.='*.-~';
  19. }
  20. $numChars = strlen($chars)-1;
  21. $string = '';
  22.  
  23. for ($i = 0; $i < $length; $i++) {
  24. $string .= $chars{mt_rand(0, $numChars)} ;
  25. }
  26. return $string;
  27. }
2. /core/classes/user.class.php
строки 1607-1621
  1. // ============================================================================ //
  2. // ============================================================================ //
  3. public static function getCsrfToken(){
  4.  
  5. $csrf_token = self::sessionGet('csrf_token', 'security');
  6. if($csrf_token) { return $csrf_token; }
  7.  
  8. return self::sessionPut('csrf_token', md5(uniqid().rand(0, 9999)), 'security');
  9.  
  10. }
  11. public static function clearCsrfToken(){
  12.  
  13. return self::sessionDel('csrf_token', 'security');
  14.  
  15. }
заменить на
  1. // ============================================================================ //
  2. // ============================================================================ //
  3. public static function getCsrfToken(){
  4.  
  5. //$csrf_token = self::sessionGet('csrf_token', 'security');
  6. //if($csrf_token) { return $csrf_token; }
  7.  
  8. //return self::sessionPut('csrf_token', md5(uniqid().rand(0, 9999)), 'security');
  9. return self::genCsrfToken(self::genCsrfTokenId());
  10. }
  11. public static function checkCsrfToken($csrf_token){
  12. $tokenId=substr($csrf_token,0,6);
  13. $controlToken=self::genCsrfToken($tokenId);
  14. if ($controlToken==$csrf_token){
  15. $csrf_tokens = self::sessionGet('csrf_token', 'security');
  16. if (!is_array($csrf_tokens)){
  17. $csrf_tokens=array();
  18. }
  19. $csrf_tokens[$tokenId]=time();
  20. self::sessionPut('csrf_token', $csrf_tokens , 'security');
  21. return true;
  22. }
  23. return false;
  24. }
  25. public static function clearCsrfToken(){
  26.  
  27. //return self::sessionDel('csrf_token', 'security');
  28.  
  29. }
  30. public static function genCsrfToken($tokenId){
  31. return $tokenId . md5($tokenId . session_id() . 'sekret key');
  32. }
  33. public static function existCsrfTokenId($tokenId){
  34. $csrf_tokens = self::sessionGet('csrf_token', 'security');
  35. if (isset($csrf_tokens[$tokenId])){
  36. if (time() - $csrf_tokens[$tokenId] >24*3600 ) {
  37. unset($csrf_tokens[$tokenId]);
  38. self::sessionPut('csrf_token', $csrf_tokens , 'security');
  39. return false;
  40. }
  41. return true;
  42. }
  43. return false;
  44. }
  45.  
  46. public static function genCsrfTokenId(){
  47. $tokenId=cmsCore::generateRandomString(6);
  48. while(self::existCsrfTokenId($tokenId))
  49. {
  50. $tokenId=cmsCore::generateRandomString(6);
  51. }
  52. return $tokenId;
  53. }
  54.  
Цена: для каждого сообщения пользователя в течении сессии скрипт сохраняет 6 символьный код. Т.е. если у вас есть пользователи оставляющие пару тысяч реальных сообщений в течении сессии, то скрипт может серьезно подгрузить сервер. Мои пользователи больше 15 сообщений в день не генерируют!
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.