I want to implement a 5 star rating system for particular articles on my site. But, I know that with a little bit of scripting, it can be easy for hackers to abuse these systems. However, I want it to be as easy as possible for a user to make a rating.

Asking the user to create a new username and password just for my site would probably deter a huge number of potential users.

I toyed with the idea of authenticating the user with a Social Sign In http://www.addthis.com/labs/social-sign-in, but this involves creating various Apps on Facebook, Twitter etc, and forcing the user to "allow" my website to access their profiles. I personally never allow websites to do this to my social accounts so I think it generally would put a lot of people off.

I could record the users IP address and not allow multiple votes, but again it is easy for a user to change their IP if they want. This method would, however, stop the less techie hackers.

Does anybody have any suggestions as to the best compromise between robustness and ease-of-use?

  • You might also try security.stackexchange.com. There may be a UX or social engineering solution as well, but I suspect you might get better answers there. Commented Feb 11, 2013 at 4:05

4 Answers 4


Any star rating on a public facing website that doesn't limit it to one vote per person, is essentially meaningless. If you want it to mean anything, you need to restrict it to signed in users.

Anything else that you do may look like a rating, but will really offer none of the benefits of a rating. If there isn't some business reason that you want people to vote, besides rating a product, then you can take it into account but not give it all the weighting. The problem once again then becomes that it is unreliable and doesn't represent what most people will think that it represents.

Rather offer an "Editors rating" or something similar which is clear, but which you can be sure offers some level of trust.


You mention that the visitors will be allowed to provide ratings to articles.

You could ask the author of each article to compile a set of five questions on the content of the article (be very specific). Once the visitor accesses the rating functionality, they are asked one of the pre-defined (not multiple choice) questions, and have to provide the answer by typing it into a simple textfield. These can be easy questions, such as "will this dish be better served with red wine, or white wine?" (as an example for a food website, where the author explicitly mentioned the preferred wine pairing).

If the answer matches your pre-defined answer, then the rating is accepted.

Some issues that may arise:

  • Internationalization: if your content is provided in multiple languages, then your questions and answers should also be translated.
  • You should allow for some fuzzy-spell-checking to allow simple spelling mistakes, letter substitutions and not be case sensitive.


  • This will ensure that your reviewers actually read enough of the article to answer the question (vaguely similar to e-commerce sites' "verified purchase" labels).
  • If the questions are provided in plain-text, then it should be easily made more accessible to users with disabilities.

I see no point in allowing everyone to rate. Then it is no more valued. It is always recommended to allow only registered users to rate an article.


Not sure if you can use it in your case, but you can consider using just Facebook like feature and compare it with the view stats. Then, you can build some indicator based on number of likes against number of visits (9 out of 300 users liked this content). You can also add time aspect to it. Refer to 500px.com Pulse (http://support.500px.com/customer/portal/articles/361315-what-is-pulse-and-views-) - they use their own like mechanism, but if you use FB Like, you will gain additional effect spreading the information about most valuable content.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.