Class SecurError

  • All Implemented Interfaces:
    Serializable

    public class SecurError
    extends Error
    Ошибка при проверки кода на безопасность.

    Данная ощибка возникает при проверке сервером на безопасность клиентского выполнения кода. Если сервер обнаруживает не безопасный код, то он не допускает его выполнение и возвращает эту ошибку клиенту. На стороне клиента будет сгенерировано исключение с этой ошибокой.

    Настройка безопасности сервера

    import xyz.cofe.trambda.sec.SecurAccess;
    import xyz.cofe.trambda.sec.SecurityFilters;
    
     ...
     server = new TcpServer<IEnv>(
        ssocket,
        session -> new LinuxEnv(),
        // Задаем ряд фильтров которые проверяют на безопасный код
        // Фильтры проверяют байт-код на наличие определенных инструкций:
        // Вызов метода или чтение/изменение поля
        SecurityFilters.create(s -> {
            // Фильтры деляться на две группы: 
            //   allow() - разрешающие 
            //   и deny() - запрещающие
            // Каждая группа может указана несколько раз
            // Фильтры применяются в порядке их указания
            // Применяется первый совпавший фильтр
            s.allow( a -> { // Здесь задаются разрешающие вызовы
                // Проверяет вызов методов публичного сервиса
                a.invoke("demo api",              
                  c->c.getOwner()
                    .matches("xyz\\.cofe\\.trambda\\.tcp\\.demo\\.([\\w\\d]+)"));
    
                // Так же разрешено вызывать методы Java Collection
                a.invoke("java collections api", c->c.getOwner().matches(
                    "java\\.util\\.(List)|java\\.util\\.stream\\.([\\w\\d]+)"));
                    
                // Это разрешение на вызов методов класса String
                a.invoke("java lang api", c->c.getOwner().matches("java\\.lang\\.(String)"));
                
                // Это разрешение на вызов стандартных BootStrap методов, 
                // которые генериурует javaс
                a.invoke("java compiler", c->c.getOwner().matches("java\\.lang\\.invoke\\.(LambdaMetafactory|StringConcatFactory)"));
            });
            
            // Все остальные вызовы запрещены
            s.deny().any("by default");
        })
    );
     
    See Also:
    Serialized Form
    • Constructor Detail

      • SecurError

        public SecurError​(String message)
        Конструктор
        Parameters:
        message - Сообщение о ошибке
      • SecurError

        public SecurError​(String message,
                          Throwable cause)
        Конструктор
        Parameters:
        message - сообщение о ошибке
        cause - Причина ошибки
      • SecurError

        public SecurError​(Throwable cause)
        Конструктор
        Parameters:
        cause - Причина ошибки
      • SecurError

        protected SecurError​(String message,
                             Throwable cause,
                             boolean enableSuppression,
                             boolean writableStackTrace)
      • SecurError

        public SecurError​(List<xyz.cofe.trambda.sec.SecurMessage<String,​xyz.cofe.fn.Tuple2<xyz.cofe.trambda.LambdaDump,​xyz.cofe.trambda.LambdaNode>>> secMessages)
        Конструктор
        Parameters:
        secMessages - Список сообщений о нарушении безопасности согласно фильтрам байт кода
    • Method Detail

      • getSecurMessages

        public List<xyz.cofe.trambda.sec.SecurMessage<String,​xyz.cofe.fn.Tuple2<xyz.cofe.trambda.LambdaDump,​xyz.cofe.trambda.LambdaNode>>> getSecurMessages()
        Возвращает список сообщений о нарушении безопасности согласно фильтрам байт кода
        Returns:
        список сообщений о нарушении безопасности