2013-05-06 140 views
0

我希望我的用户能够使用Markdown进行评论并避免使用XSS。如何使用Markdown和MySQL?

什么是正确的动作顺序?

这是我的它是如何工作的理解:

user input via HTML form using Markdown syntax 
$Input = markdown(mysql_real_escape_string($_POST['userInput'])); 
insert $input into database 

然后,我需要同时使用用htmlspecialchars?

+0

'markdown'是做什么用的?为什么在存储数据之前运行它? – PeeHaa 2013-05-06 11:22:22

+0

你正在使用'mysql_query',不是吗? – tadman 2013-05-06 11:22:22

+2

[**请不要在新代码中使用'mysql_ *'函数**](http://bit.ly/phpmsql)。他们不再被维护[并被正式弃用](https://wiki.php.net/rfc/mysql_deprecation)。看到[**红框**](http://j.mp/Te9zIL)?学习[*准备的语句*](http://j.mp/T9hLWi),并使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli) - [这篇文章](http://j.mp/QEx8IB)将帮助你决定哪个。如果你选择PDO,[这里是一个很好的教程](http://www.brightmeup.info/article.php?a_id=2)。 – 2013-05-06 11:27:02

回答

0

mysql_real_escape_string用于避免SQL INJECTION。因为它逃脱了SQL。

可使用用strip_tags避免XSS(),的preg_match()和用htmlspecialchars()一起

XSS是基于包含漏洞利用html标签。例如java脚本中的脚本,或重定向,或打开标签中的文件。

strip_tags()删除html标签。还有一个更有趣的功能叫做

htmlspecialchars()用于防止XSS。

最项重要的事情来防止SQL注入攻击

  1. 数据验证使用的preg_match
  2. 使用strip_tags的
  3. 数据清除使用的htmlspecialchars

所以首先你应该验证数据

  • 输出转义,然后消毒它,最后使用htmlspecialchars逃脱它。

  • +0

    这个人降低了我的帖子应该重写他的脚本安全性,并知道什么是XSS和SQL注入之间的区别。 – Robert 2013-05-06 11:30:30

    +0

    我投了票,因为当时这是一个非常简短的答案,没有提供解决方案。从那时起,你已经扩大了它。我非常警惕确保人们了解SQL注入问题,甚至是让人恼火。 – tadman 2013-05-06 14:48:40

    0

    在将数据插入数据库之前,转义应该是您做的最后一件事。在此时运行markdown或其他任何功能,都为时已晚。其次,HTML转义和Markdown转换是一个显示的担忧,并且不应该影响写入数据库的内容。在呈现HTML页面时执行这些功能,而不是之前。数据库应该包含原始降价,而不是HTML版本。