Skip to content

System Features

Jerryxmas edited this page Jun 10, 2019 · 1 revision

System Features

Basic Features

List of Online Users

All known users using this system is displayed on the Status Bar on the right with their current status (Online, Busy, Away, Offline).

This is automatically refreshed every 10 seconds.

Encryption and Decryption of Private Messages

Private Messages are sent to each other using asymmetric key encryption. This Means only the intended receiver is able to decrypt the information. Even if the message is compromised the data is useless without the private key to decrypt it.

Signatures for Data Transferred

All messages also have a signature attached to them. This can be used to verify the authenticity of the sender to prevent and forgery. The signature is checked against the central database.

Unicode Support

πŸ˜€πŸ˜€πŸ˜€πŸ˜€πŸ˜€πŸ˜€πŸ˜€πŸ˜€πŸ˜€πŸ˜€

Broadcast and Private Messaging

Messages have the option of being sent to everyone or just a specific person. Private messages are also sent to everyone but due to the encryption, only the intended receiver will be able to see it.

By sending to everyone that is online instead of just the intended receiver was done so that even if the receiver is offline, they will have a method of getting the message next time they are online (not currently implement on this particular version). Essentially everyone has a copy of all the messages however only the intended receiver will open it.

Because we are sending to everyone online, the bottleneck is waiting for a response from the client. The current system utilizes threading to speed this up.

Automatically refreshing of content

All the broadcast messages, private messages, and list of users refresh automatically on the page using Javascript without the need to refresh the page.

Advanced

API-key authentication

API keys are used for authentication instead of using BASIC http and passing the user password along every time a request is made.

Defense against Injection Attacks

Using SQL database and javascript exposes the possibility of being attacked with HTML or SQL injections. SQL is done using querying, and javascript manipulates HTML using DOM instead of string building which prevents injection attacks. Incoming data are also scanned for HTML code and appropriate HTML escaping is applied to further minimize the risk of injections

note:A small amount of JS code is still left with string building due to time constraints. This should still be caught with the HTML escaping code and poses no obvious issue.

Private Data loading for cross-client compatibility

Due to the encryption of private messages, the client needs a way to transfer the private key between different machines. Otherwise, the user will not be able to see their previous messages. We've encrypted the private key along with other useful private data such as lists of favourited and blocked words/ users using symmetric encryption and another set of a private password. This allows the user to use different versions of the client seamlessly without losing access to messages.