M

mkev

+12
Репутация
0
Рейтинг
#1 Компонент регистрация. Капча 4 апреля 2013 в 17:22
Зайдите в /include/code_gen/kcaptcha_config.php, и поправьте параметры так, как вам нужно.
#2 [ЕСТЬ РЕШЕНИЕ] Обновился до InstantCMS 1.10 1 апреля 2013 в 23:24
Все эти файлы на сервере у вас лежат в дистрибутиве 1.10
просто броузер их не закачивает заново. Он смотри в кэш и видит, что недавно закачивал файлы с таким же именем с того же адреса.
А вы поменяли версию и начинаются проблемы.
Решение: В броузере жмете Ctrl-Shift-Del и чистите кэш.
#3 [ЕСТЬ РЕШЕНИЕ] Обновился до InstantCMS 1.10 1 апреля 2013 в 21:47
Подобная проблема возникала у некоторых моих пользователей, экономящих трафик. CSS и javascript файлы не обновлялись.
Решилось ручной очисткой кэша броузера, ну или подождать пока кэш сам прокиснет.
#4 Не запоминает сессию пользователя 1 апреля 2013 в 21:28
Тяжелый вопрос.
Многие дамы в возрасте так не думают, и перестают писать в форум, особенно с мобильных.
В общем, в эпоху динамических IP и мобильной связи привязка в сессии к IP адресу — жесткое ограничение.
#5 Не запоминает сессию пользователя 1 апреля 2013 в 19:12
На самом деле это не ошибка хостера, а достижение разработчиков Инстанта.
Сессия сейчас привязывается к IP.
В /core/user.class.php нужно редактировать функцию
  1. private function checkSpoofingSession() {
  2.  
  3. // первый раз зашли
  4. if(!isset($_SESSION['user_ip'])) {
  5. $_SESSION['user_ip'] = $_SERVER['REMOTE_ADDR'];
  6. return true;
  7. }
  8.  
  9. return $_SERVER['REMOTE_ADDR'] == $_SESSION['user_ip'];
  10.  
  11. }
например до такого состояния
  1. private function checkSpoofingSession() {
  2. return true;
  3. }
#6 404 при написании сообщения в форуме в 1.10.1 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.