Originally, when the the CLR support was added to SQL 2005, there was distinction of SAFE, EXTERNAL_ACCESS and UNSAFE assemblies. The implementation of SAFE relied on seomthing called CAS, Code Access Security .NET. That is, CASE guaranteed that the safe
assembly could not do dirty things.
However, CAS eeased to be a security bounadry with .NET 3.5, and since SQL 2012, SQL Server have used .NET 4. Apparently, the SQL Server folks did not really notice the CAS change for a couple of years, but they woke up in time for SQL 2017.
Since CAS is not a security boundary any more, all assemblies are by definition unsafe. A skillful programmer could be able to put in unsafe stuff that is able to access the internal memory of SQL Server and other ugly things inside an assembly that passes
as SAFE. No, I don't know how do it, and I don't know if has been exploited.
The text you quote lists three options. There is a fourth which may be the easiest one to manage. You can use sp_add_trusted_assembly to enter a hash for the assembly. Google this name to find the details.
Assuming that these are assemblies you have used for years, there is little reason why you would not trust them.
Erland Sommarskog, SQL Server MVP, esquel@sommarskog.se