Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP安全问题?_Php_Mysql_Security - Fatal编程技术网

PHP安全问题?

PHP安全问题?,php,mysql,security,Php,Mysql,Security,我只是想知道在创建一个接受文章的网页时应该使用哪些基本的PHP安全技术 我对PHP相当陌生,想知道在我成为一名安全专家之前,什么能支撑住这座堡垒?这太宽泛了,也许你应该试着缩小一点 什么样的安全? 密码? 你想限制一些东西吗? SQL注入? HTML注入? 跨域安全?有很多需要了解的,您应该尽快开始 首先,如果您接受文章(可能使用WYSIWYG并接受HTML),请使用一些东西来解析内容,并去除可能使您容易受到XSS等攻击的内容 一个例子是> P>当接受稍后生成的用户生成文本时,需要考虑两个方面。

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


我对PHP相当陌生,想知道在我成为一名安全专家之前,什么能支撑住这座堡垒?

这太宽泛了,也许你应该试着缩小一点

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

有很多需要了解的,您应该尽快开始

首先,如果您接受文章(可能使用WYSIWYG并接受HTML),请使用一些东西来解析内容,并去除可能使您容易受到XSS等攻击的内容


一个例子是

> P>当接受稍后生成的用户生成文本时,需要考虑两个方面。 首先,您需要保护数据库免受注入攻击。这里有一个简单的PHP函数:当将此字符串作为字段值传入存储时,它通常足以保护数据库不被注入

从这里开始,您必须小心您的显示,因为允许上载HTML代码的用户在显示该代码时可能会对其他用户做出令人讨厌的事情。如果你写的是纯文本文章,你可以简单地把结果变成文本。(您可能还希望将换行符转换为
标记。)如果您使用的是格式化解决方案,如本网站上使用的降价引擎,这些解决方案通常会提供作为引擎功能的HTML清理,但请务必阅读文档并确保


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

好吧,正如其他答案中提到的,您的PHP脚本可能会在许多不同的方面受到损害

以下是几点:

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


最好从使用Drupal或CakePHP这样的框架开始。这样,您既可以从他们实现安全性的方式中学习,也可以利用已经实现的事实。学习曲线足够陡峭,无需使用您自己的身份验证机制等。

当您的项目准备好供公众使用时,通常最好设置错误报告(0)


它不会提供更高的安全性,但会让坏人(通常)更难发现你网站上可能存在的安全问题。

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

  • 在数据库中创建两个用户,只读帐户只进行选择和计数,在必须进行更新、插入或删除时写入帐户
  • 当您必须插入数据库或删除、清理输入时,请使用mysql准备的语句或通过post或get方式到达的断言值:

    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();
    }
    

让我们假设提交人名、内容等数据。注意:我假设MySQL数据库,其他数据库类型也有相同的函数。应该使用参数化查询,而不是
MySQL\u real\u escape\u string()
-MySQL\u real\u escape\u string()不保护任何内容。它只是一个简单的转义函数,只有与引号结合使用时才有效。因此,规则必须类似于“使用mysql\u real\u escape\u string()转义数据并将其括在引号中”。剩下的没问题。糟糕的推荐。请不要混淆错误报告级别(应该始终尽可能高)和错误报告目标(应该从显示切换到在生产服务器上登录)。是的,我的想法是,普通用户不会看到错误消息。如何处理错误消息是每个人自己的决定,但正如你所说的,最好存储它们。