FastReport .NET obsługuje obliczanie wyrażeń do wyświetlania wartości w żądanej formie, lub dowolnych warunków widoczności obiektu. Możliwe jest również przetwarzanie zdarzeń dla każdego obiektu raportu, np. przed jego wydrukiem. Procedury obsługi zdarzeń (event handlers) są umieszczone w skrypcie raportu, który obsługuje języki C# i VB.NET. Oprócz przetwarzania zdarzeń, skrypt może zawierać prawie wszystkie obliczenia lub czynności, które mogą generować niezbędne dane lub zmienić zachowanie raportu, zgodnie z wymaganiami twórcy szablonu raportu.
Przed zbudowaniem programu w języku skryptowym raportu, generator raportów uwzględnia wszystkie wyrażenia, funkcje i wywołania parametrów w raporcie. Następnie program jest łączony ze skryptem, który został napisany przez twórcę szablonu raportu. Powstały skrypt jest kompilowany i ładowany jako biblioteka do aplikacji, która współpracuje z generatorem raportów.
Uruchamiając raporty w aplikacjach internetowych, można je edytować za pomocą programu Online Designer. Edycja odbywa się za pomocą przeglądarki, edytowany raport jest wysyłany do serwera, a następnie może być tam budowany.
Raporty są edytowane przez zaufanych programistów i uruchamiane w izolowanym środowisku. Możliwość korzystania ze skryptów w raportach daje natomiast swobodę i niemal nieograniczone możliwości przetwarzania danych i wizualizacji. Edycja i wykonanie są pod kontrolą. Gdy tylko pojawia się możliwość ogólnego dostępu do edycji raportów przez przeglądarkę i Online Designer, powstaje pytanie o bezpieczeństwo raportów na serwerze. Istnieje możliwość wstrzyknięcia złośliwego kodu do skryptu i wyrażeń raportów.
Aby zapobiec wykonaniu złośliwego kodu w skrypcie i wyrażeniach raportów podczas pracy w sieci, w FastReport .NET 2020.3.22 dodano specjalne funkcje bezpieczeństwa. Zmiany dotyczą FastReport .NET, FastReport .NET Core, FastReport Mono i FastReport Open Source.
Funkcje bezpieczeństwa są domyślnie aktywne, ale programiści mogą je zmieniać lub wyłączać w swoich aplikacjach w zależności od potrzeb.
Nowe właściwości i metody:
bool FastReport.Utils.Config.EnableScriptSecurity – włącza lub wyłącza sprawdzanie skryptu raportu. Działa tylko wtedy, gdy raporty są uruchamione w aplikacjach internetowych (FastReport.Utils.Config.WebMode == prawda). Wartością domyślną jest Prawda (włączona).
event FastReport.Utils.Config.OnEnableScriptSecurityChanged – zdarzenie jest wywoływane, gdy EnableScriptSecurity zostało zmienione. Możliwość wykorzystania do dodatkowych kontroli bezpieczeństwa.
FastReport.Web.WebReport.SetScriptSecurity(IScriptChecker scriptChecker) – ustanawia niestandardową implementację metody weryfikacji, która jest nadrzędna w stosunku do wbudowanych metod kontroli bezpieczeństwa.
ScriptSecurityProperties FastReport.Utils.Config.ScriptSecurityProps – parametry do konfiguracji kontroli bezpieczeństwa skryptu. Zawiera wartość NULL, jeżeli nie jest uruchomiona żadna aplikacja internetowa. (FastReport.Utils.Config.WebMode == fałsz).
bool FastReport.Utils.Config.ScriptSecurityProps.AddStubClasses – włącza lub wyłącza dodawanie klas stub do skryptu. Wartością domyślną jest Prawda domyślnie (włączona). Nie pokrywa się z instalacją własnego programu SetScriptSecurity (patrz wyżej).
event FastReport.Utils.Config.ScriptSecurityProps.OnStopListChanged – zdarzenie jest wywoływane, gdy lista StopList została zmieniona. Możliwość wykorzystania do dodatkowych kontroli bezpieczeństwa.
string[] FastReport.Utils.Config.ScriptSecurityProps.StopList – lista słów kluczowych, które nie powinny być używane w skrypcie raportu. Zawiera domyślną listę słów.
FastReport.Utils.Config.ScriptSecurityProps.SetDefaultStopList() – ustawia domyślną wartość StopList (odrzuca zmiany).
Opracowany kompleks ochrony skryptów raportów pozwala zminimalizować zagrożenie wstrzyknięcia złośliwego kodu i jego wykonania po stronie serwera.
Należy pamiętać, że nawet wykorzystanie wbudowanych kontroli bezpieczeństwa skryptów raportów nie zapewnia stuprocentowej ochrony przed wstrzyknięciem złośliwego kodu do zapisanych szablonów. Zdecydowanie zalecamy więc prowadzenie dzienników dostępu w aplikacjach internetowych i umożliwienie edycji szablonów raportów ograniczonej liczbie uprzywilejowanych użytkowników.