使用htmlspecialchar(),mysql_real_escape_string,trim()和str_replace吗?

时间:2013-06-28 07:17:22

标签: php

htmlspecialcharmysql_real_escape_stringstr_replace的使用是否足以防止SQL注入和基于XSS的攻击?

我正在为论坛网站编写软件。所以我想保护我的网站。我不擅长制作PDO语句,并且想要使用上面的库函数。

通过使用htmlspecialchar单引号和双引号,大于,小于和符号将被编码并防止XSS攻击。我不会将它们解码为原始形式。

然后,mysql_real_escape_string将阻止SQL注入的第一顺序。

第三,trim将从两端移除空格。(这可能是可选的)

最后,如果我使用str_replace将所有通过代码输入的表名和数据库名替换为其他名称会安全吗?

实施例: 假设我有一个数据库名称ABC和表名XYZ。 现在有人使用这个陈述:

statement = "SELECT * FROM XYZ WHERE name = '" + userName + "';"

                          OR
SELECT * FROM XYZ WHERE name = '' OR '1'='1' -- ';

                          OR

a';DROP TABLE XYZ; SELECT * FROM userinfo WHERE 't' = 't

在这里,如果我使用XYZ将表名DEF替换为str_replace,那么我认为代码无效,因为没有这样的表名。

SQL注入,如

1 OR 1=1, I Will Also str_replace \1\.

我对数据库只有UPDATEINSERTSELECTDELETE权限,所有这些单词也都是str_replace

[请原谅我错误的英语。 ]

1 个答案:

答案 0 :(得分:4)

没有。这永远不够。 XSS可以在属性中发生,没有任何<或者>迹象。

此外,您将容易受到标题注入(例如,如果您要发送电子邮件)

并且替换表名是完全错误的。

转发所有数据发送到数据库,并确保当您期望数字而不是字符串时,您传递数字(转换为数字)。

逃避所有输出。但是,如果您在属性中使用动态数据,最好使用HTMLPurifier来清除HTML。

如果您有文件上传,请保护它们。确保用户无法上载可执行文件,并且无法覆盖文件。不要相信$ _FILES ['name']属性

如果您要发送电子邮件,请注意标题注入。

最重要的是,只需使用经过验证的框架即可。它可以为您提供PDO功能并逃脱。