2010-03-26 136 views
5

我只是想知道在创建接受文章的网页时我应该使用哪些基本的PHP安全技术?PHP安全问题?

我对PHP相当陌生,想知道在我担任安全专家之前,哪些东西能保持下去?

回答

1

这是广泛的,也许你应该尝试缩小一点。

什么样的安全性? 对于密码? 你想限制一些东西吗? SQL注入? HTML注入? 跨域安全性?

+0

可以说,提交数据如人名,内容等。 – pHp 2010-03-26 01:17:38

0

有很多事情要知道,你应该尽快开始。

其中之一,如果您接受文章(可能使用所见即所得并且正在接受HTML),请使用某些内容来解析内容并删除可能使您容易受XSS等影响的内容。

一个例子是HTML Purifier

5

接受稍后将显示的用户生成文本时需要考虑两个方面。

首先,您需要保护数据库免受注入式攻击。这里有一个简单的PHP函数:mysql_real_escape_string()通常足以在传递该字符串时将数据库从注入状态保存为字段值。

从那里开始,你必须小心你的显示器,因为允许上传HTML代码的用户可以在其他用户上显示代码。如果您正在制作纯文本文章,则可以简单地使用htmlspecialchars()生成的文本。 (您也可能想将换行符转换为
标签)。如果您使用的是格式解决方案(如本网站使用的Markdown引擎),那么这些解决方案通常会根据引擎的功能提供HTML清理,但是一定要阅读文档并确保。

噢,请确保您还验证用于提交文章的GET/POST变量。毫无疑问,所执行的验证将需要根据您的网站的逻辑处理进行量身定制。

+0

请注意:我假设一个MySQL数据库,其他数据库类型有相同的功能。 – 2010-03-26 01:18:43

+3

参数化查询应该用来代替'mysql_real_escape_string()' - http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements – 2010-03-26 01:29:57

+1

mysql_real_escape_string()不保护任何东西。它仅仅是一个简单的转义函数,并且仅在与引号结合时才起作用。所以,该规则必须像“用mysql_real_escape_string()**和**将它们用引号括起来一样”。剩下的就好了。 – 2010-03-26 07:01:37

1

那么,正如其他答案中提到的,有许多不同的方面可能会危害您的PHP脚本。

这里只是一对夫妇:

有许多的方式来处理每一个。这里有一些事情看:

0

这可能是明智的使用Drupal的一样或CakePHP的框架开始。这样你就可以从他们实施安全的方式中学习,并利用它已经完成的事实。学习曲线足够陡峭,无需推出自己的认证机制等。

-1

当您的项目已准备好供公共使用时,通常是设置error_reporting(0);

它不会提供更多的安全性,但它使得坏人(通常)很难找到可能的安全问题与您的网站。

+0

糟糕的推荐。不要混淆错误报告**级别**,该级别**应始终尽可能高,并带有错误报告**目标**,应将其从显示切换到生产服务器上的日志。 – 2010-03-26 07:04:02

+0

好的,我的想法是,普通用户不会看到错误信息。 如何处理错误信息我的每个人都有自己的决定,但正如你所说,最好存储它们。 – Mikk 2010-03-26 11:19:24

0

也许两个小技巧可以帮助你获得更多的安全网站

  • 在数据库中创建两个用户,只读帐户,以仅选择和计数,并写帐户时,您需要做的更新,插入或删除。
  • 当你插入到数据库或删除,消毒投入,用mysql准备陈述或断言,通过邮寄到达或得到这样的值:

    if(!empty($_GET["integer_like_id_value"]){ 
        $integer_id_value = (int)$_GET["integer_like_id_value"]; 
    }else{ 
        // that stuff seems not to be legit, die application, log error ? whatever 
        die(); 
    }