Unlock encrypted files without allowing users to access them

Looking to incorporate model-viewer or three.js into my personal website to showcase 3D models. To display these models online, the client must retrieve files from the server (including the 3D mesh and texture images).

However, I want to prevent my visitors from accessing these files directly. Seeking advice on how to achieve this goal, here are some initial thoughts that may not be effective:

(1) Implementing a tool like crypto-js for file encryption and decryption

  • Concerns about users having access to decrypted files on the frontend
  • The key transfer to frontend code raises security vulnerabilities

(2) Dividing files into small segments and reassembling them on the client side

  • Similar issue as with the first approach
  • Risks of exposing codes for reassembly, enabling file access

While exploring these ideas, uncertainty arises about achieving the desired outcome 🤔

If impossible, are there alternative strategies to make it difficult for users to obtain file access?

Answer â„–1

Simply put, if your content is on a website, it's nearly impossible to fully protect it from someone determined enough to access it. Even with encryption and various security measures in place, there are ways for savvy individuals to get their hands on your data.

No matter how you try to safeguard your files, the code needed to read them must be sent to the browser, leaving room for potential breaches. While techniques like WebAssembly can complicate reverse-engineering efforts, they are not foolproof solutions.

Ultimately, data will have to pass through the webgl-api, making it vulnerable to interception by browser extensions. Even encrypting vertex data or using elaborate file formats can only provide temporary obstacles for those intent on accessing your information.

There are some strategies that may offer some level of protection:

  • Utilizing LoFi or partial models alongside full-resolution renders for browser display, as seen in CAD-/3D-model download sites.

  • Creating custom file formats or obfuscating file types in developer tool network views, similar to Google maps/earth's approach with 3d-data.

  • Exploring options like the WebCrypto-API with pre-shared secrets to obscure the presence of 3d-data in certain files.

Similar questions

If you have not found the answer to your question or you are interested in this topic, then look at other similar questions below or use the search

In angular, concealing the pagination bar can be achieved when the quantity of pages is lower than the items per page count. Let's delve into

I am facing an issue where I need to hide the pagination bar if the number of pages being rendered is less than the items per page. I attempted to use ng-show but it was not successful. <tr ng-repeat="row in allItems"> ...

Selecting a value from a populated dropdown and checking the corresponding checkbox in SQL Server

There are 8 checkboxes in this example: <table style="border-collapse: collapse; width: 100%;" border="1"> <tbody> <tr style="height: 21px;"> <td style="width: 25%; height: 21px;"><strong>Technology</strong& ...

Updating a connected model in Sequelize using another model

Seeking guidance on updating a model with new associations in Sequelize. The model involves a many-to-many relationship with a join table. Attempted this code snippet: app.patch('/api/team/:id/newplayers', function(request, response){ const pl ...

Performing a cross-domain JSON Get request with JQuery

Struggling with a simple JSON get request to an API on a domain that I don't have control over. Here's the code I'm using: $(document).ready(function () { $.ajax({ type: 'GET', url: 'http://pu ...

`How to retrieve query parameters using the GET method in AngularJS`

I have created a REST API in WSO2 ESB. Below is the request service for the POST method: createUser: function(aUser) { var myCreateUserRequest = { "User": { "UserName": aUser.Username, ...

"Embrace the Tempus Dominus integration for the latest version of Bootstrap -

After reading through the script documentation, I attempted to implement it on my example page. However, I keep encountering the error: Uncaught TypeError: $(...).datetimepicker is not a function. Here's the code snippet that I included in the head s ...

Managing multiple checkboxes in a Vue component

I have a checkbox component in Vue: <template> <div class="checkbox"> <input class="checkbox-input" name="input" type="checkbox" v-model="checkbox"> </div> </templ ...

The Vue component seems to be missing the definition of $v for Vuelidate

I've been struggling to resolve this issue. The error message I am encountering pertains to a Vue component that is utilizing the Vuelidate library for form validation. Do you have any insights on what might be causing this error? Uncaught TypeError: ...

What is the best way to display a message or alert after a page has been re

I've implemented Jquery Toastr to display success messages, functioning similarly to an alert for a brief period. My objective is to display a message after the page reloads. The issue arises when the page is reloaded, causing the JavaScript to reloa ...

Function not currently in operation

There seems to be an issue with the script not running or returning any answers. The console is blank. I am attempting to retrieve an answer from the Yandex Translate site (https://tech.yandex.com/translate/doc/dg/reference/translate-docpage/) Code: http: ...

Use vue.js to add a block of content after every sixth iteration in a loop

Currently, I have a list of offer cards rendering through a loop. I am adding a row div every 3rd column (bootstrap) element. Now, I need to also add another column element (banner block) for every 6th element in order to achieve a layout like the one show ...

Solution for displaying table cells in IE 7 and lower using Javascript

Lately, the community has come up with some amazing tools to push early versions of IE beyond their intended capabilities. For example, using multi-column CSS selectors. However, I've been struggling to find a JavaScript that can be loaded conditional ...

Angular JS's flawed accuracy in subtracting two decimal numbers

Within my AngularJS application, there exists an object containing three distinct amounts. When examining the Chrome browser debugger, I encountered the following information: The calculation for payment.amountForClosing is derived from subtracting paymen ...

Using Javascript and jQuery to convert text into a tag

I'm attempting to use JavaScript to send a message on twitch.tv by modifying the textarea in the chatbox. <textarea class="tw-textarea tw-textarea--no-resize " placeholder="Send message" data-a-target="chat-input" data-test-selector="chat-input" s ...

Ways to handle <select> change events effectively in materialize css

My attempt at using a basic jquery change listener on a materialize css select dropdown has been unsuccessful. $("#somedropdown").change(function() { alert("Element Changed"); }); 1) Can anyone provide guidance on how to add a listener to ...

Node is throwing a 302 error on Localhost:3000

Looking for some guidance as a beginner trying to create and run a nodejs application. Encountering an error while running server.js via nodemon, the console displays the following: Express server listening on port 3000 Mongoose default connection open t ...

Determine if the input text field contains any text and store it in a variable using jQuery

I'm working on a form that includes radiobuttons and textfields. To keep track of the number of checked radiobuttons, I use this code: var $answeredRadiobuttons = $questions.find("input:radio:checked").length; But how do I store the number of textf ...

Designing a nested function within a function encapsulated within a class

Suppose I have a class with a function inside: var myClass = class MyClass() { constructor() {} myFunction(myObj) { function innerFunction() { return JSON.stringify(myObj, null, 2); } return myObj; } } In this scenario, callin ...

Is there a way to iterate through an array in reverse, starting from the last element and ending at the first element?

Is there a way in JavaScript to map an Array starting from the last index and going all the way to the beginning descending, without iterating from the beginning index? I'm looking for a more efficient method or feature I might have overlooked. Any s ...

Please provide both an image and text in addition to a progress bar by using the form to

I am working on a form that needs to store both images and text data in a database. <form action="processupload.php" method="post" enctype="multipart/form-data" id="UploadForm"> <input name="name" type="text" /> <input name="age" ty ...