PHP / MySQL安全性 - 从哪里开始?

时间:2009-08-25 01:47:07

标签: php mysql

我是一名对在线安全一无所知的PHP / MySQL菜鸟。

你能指点我一些有助于我的知识的资源吗? (初学者级别,请!)

5 个答案:

答案 0 :(得分:8)

我会建议两件事:

  1. 确保Register_globals已关闭。
  2. 使用prepared statements

答案 1 :(得分:5)

This问题得到了很好的解答,涵盖了MySQL注入攻击(更常见的问题之一)。 This问题也有详细记录,并且很好地涵盖了XSS(跨站点脚本)攻击。

最后,了解PHP.INI以及如何设置它以及实际打开/关闭和打开/关闭的内容。例如,一个好主机永远不会打开寄存器全局,但你应该至少知道它是什么以及为什么要检查它。 PHP Security有资源和许多其他PHP安全问题。

答案 2 :(得分:1)

PHP可能不是最好的开始。特别是如果你主要是在手动编写自己的代码。它并不完全掌握安全问题。 (fd:我希望PHP会因各种原因而消失。)

但是一些一般规则:

  • 不要相信任何来自外面的东西。总是假设用户是一个试图打破你的应用程序的混蛋。当然,他们中的大多数都不会,但最终会有一个人。仅仅因为你给浏览器一个包含a,b和c的<select>并不意味着你会得到其中一个。 Javascript不是任何保证。参考者很容易被伪造。 POST数据很容易被伪造。文本框可以包含任何字符,而不仅仅是您期望的字符。
  • 如果您不确定其工作原理,请不要将其他人的代码复制粘贴到生产中。你不知道作者对安全性有多大关注。根据我的经验,特别是PHP copypasta似乎不太可靠,但更频繁地盲目重用。
  • 不要相信自己在几十个不同的地方进行同样的仪式。是的,mysql_real_escape_string()将修复SQL注入,但是你必须记住在任何地方使用它。这会造成很多地方,你可能会犯错,忘记你逃避的仪式。使用预准备语句,问题完全消失。另一个例子:Pylons(一个Python框架)对其模板进行装配,因此任何变量都是HTML转义的,除非你明确地另外要求。 XSS不再是一个问题,我永远不必担心手动转义我打印的所有内容。

答案 3 :(得分:1)

Chris Shiflett是PHP编程和安全的首选:

答案 4 :(得分:1)

如果你有时间,可以看一下几个月前conference at the Dutch PHP Conference期间Stefan Esser使用的幻灯片,标题是“面向初学者的PHP安全速成课程”。

有几个PDF:

那些可能会有所帮助。

然后,不要犹豫,搜索一下非特定于PHP的信息:一些安全问题(如XSS,SQL注入,CSRF,......)并非特定于PHP:只有技术手段才能避免它们是具体的;所以,您可以在维基百科或OWASP website

等网站上找到大量信息