针对用户输入的全面安全性-PHP,MySQL [重复]

Posted

技术标签:

【中文标题】针对用户输入的全面安全性-PHP,MySQL [重复]【英文标题】:Comprehensive Security Against User Input - PHP, MySQL [duplicate] 【发布时间】:2012-07-27 02:29:45 【问题描述】:

可能重复:What's the best method for sanitizing user input with php?What are the best PHP input sanitizing functions?The ultimate clean/secure function

目标:在进入数据库之前正确清理来自文本框的所有输入,然后将其输出到页面。对于我的用例,我需要在不消除数据输入的情况下防止潜在问题。此外,字符集在 HTTP 标头和 META 标记中都明确设置为 UTF-8,以防止出现格式错误的编码问题。数据库也设置为 UTF-8。

规格:PHP、mysql、Apache

示例代码

    function secureinput($input)
    
       $input = htmlspecialchars($input, ENT_QUOTES ,'UTF-8');
       $input = strip_tags($input); //fail-safe for anything that gets through
       $input = mysql_real_escape_string($input);

       return $input;
    

问题:这仍然容易受到哪些攻击媒介(XSS、SQL 注入等)的攻击?

非常感谢任何可以提供帮助的人。这是我第一次发帖,尽管我总是先求助于 SO 来查找我的问题的答案。不幸的是,这一次我找不到任何其他问题可以回答我的问题,只有一小部分。

【问题讨论】:

要将安全提升到一个新的水平,开始使用 PDO(或 mysqli)代替 mysql_* 函数。 ;) 你也应该使用parameterized SQL来100%消除SQL注入的风险。 没有神奇的一次性安全/清理功能。这一切都取决于上下文。你那里的东西都是废话。 这个问题被问了一遍又一遍:***.com/q/129677/112968 我会从框架或库中选择现成的解决方案,而不是从头开始构建解决方案。代码中总会有安全漏洞.. 【参考方案1】:

XSS 攻击

通过在输出用户输入的内容时使用 htmlspecialchars(),可以确保免受 XSS 攻击。

SQL 注入

Steve Friedl 在他的网站上提供了一些 SQL 注入和输入清理限制的示例:http://www.unixwiz.net/techtips/sql-injection.html

即使您的代码可能可以防止使用 mysql_real_escape_string() 进行 SQL 注入攻击,但最好还是使用参数化 SQL 并完全消除 SQL 注入的风险。如果您在 PHP 中使用 PDO 或 mysqli 而不是已弃用的 mysql 函数,也会更加安全。

【讨论】:

以上是关于针对用户输入的全面安全性-PHP,MySQL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

网络安全最全面试题

Android:3d 安全重定向响应

动态网站安全问题(PHP+MySQL)

在 php.ini 文件中保存 MySQL 用户名/密码是不是安全? [复制]

针对 PHP 中的数据检索优化的 MySQL 数据库设计

元刷新重定向是不是“安全”