PHP安全问题?

5

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

我对PHP还比较新,想知道在我成为安全专家之前,什么可以保证我的网页安全?

8个回答

5

当接受用户生成的文本以便后续显示时,需要考虑两个方面。

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

从那里开始,您必须小心您的显示方式,因为允许上传HTML代码的用户在显示该代码时可能对其他用户造成不良影响。如果您正在使用纯文本文章,则可以简单地htmlspecialchars()结果文本。(您还可能希望将换行符转换为< br/>标签。)如果您正在使用格式化解决方案,例如在本站使用的Markdown引擎,则这些解决方案通常会作为引擎的功能提供HTML消毒,但请务必阅读文档并确认。

哦,确保您还验证用于提交文章的GET / POST变量。这是不言而喻的,所执行的验证将需要根据您的站点与其逻辑进行调整。


请注意:我假设使用的是MySQL数据库,其他类型的数据库也有相应的函数。 - Blank
3
应该使用参数化查询而不是 mysql_real_escape_string() 函数来避免 SQL 注入攻击。有关详细信息,请参见此链接:http://en.wikipedia.org/wiki/SQL_injection#Parameterized_statements - Chad Birch
1
mysql_real_escape_string() 函数并没有起到保护数据的作用,它只是一个简单的转义函数,仅在与引号一起使用时才有效。因此,规则应该是“使用 mysql_real_escape_string() 转义你的数据 用引号括起来”。其余部分没问题。 - Your Common Sense

1

这个问题太笼统了,也许你应该尝试缩小范围。

你想要什么样的安全措施呢? 是针对密码的吗? 你想要限制一些特定内容吗? 防范SQL注入攻击? 还是防止HTML注入攻击?跨域安全?


假设提交人们的姓名、内容等数据。 - pHp

1

好的,正如其他答案中提到的那样,您的PHP脚本可能会在许多不同的方面受到威胁。

以下是其中的一些:

有许多方法可以处理每个问题。以下是一些需要注意的事项:


0
也许有两个提示可以帮助你获得更安全的网站。
  • 在您的数据库中创建两个用户,只读账户仅能进行查询和计数操作,写入账户可进行更新、插入或删除操作。
  • 当您要插入或删除数据时,请对输入进行清理,并使用MySQL准备语句或断言通过post或get接收到的值:

    if(!empty($_GET["integer_like_id_value"]){
        $integer_id_value = (int)$_GET["integer_like_id_value"];
    }else{
        //这些数值似乎不合法, 终止应用程序,记录错误?或其他操作
        die();
    }
    

0

有很多需要了解的内容,你应该尽早开始。

首先,如果你接受文章(并且可能使用所见即所得编辑器并接受HTML),请使用某些工具来解析内容并剥离可能使你容易受到XSS等攻击的东西。

一个例子是HTML Purifier


0

如果你想开始编程,使用像Drupal或CakePHP这样的框架可能是明智的选择。这样你可以学习他们实现安全性的方式,并利用已经完成的工作。在没有自己开发认证机制的情况下,学习曲线已经足够陡峭了。



-1

当你的项目准备好供公众使用时,通常最好设置error_reporting(0);

它不会提供更多的安全性,但通常会使坏人更难找到你网站可能存在的安全问题。


糟糕的建议。不要混淆错误报告的“级别”,它应该尽可能高,与错误报告的“目的地”不同,生产服务器上应将其从显示切换到日志记录。 - Your Common Sense
嗯,是的,我的想法是普通用户不会看到错误消息。如何处理错误消息是每个人自己的决定,但正如你所说,最好将它们存储。 - Mikk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接