$listing = mysql_real_escape_string(htmlspecialchars($_POST['listing']));
回答
取决于 - 如果您正在等待文本,这就好,尽管您不应该将htmlspecialchars放在输入中。在输出中做。
你可能想读这样的:What's the best method for sanitizing user input with PHP?
是的。但是,您不应该在输入时使用htmlspecialchars。只在输出时打印它。
这是因为,不能确定输出将始终通过html。它可能通过终端,所以如果怪异的代码突然出现,它可能会让用户感到困惑。
如果你的列表变量是一个数组呢?
你应该递归地清理这个变量。
编辑:
其实,这种技术可以防止SQL注入,但你不能避免XSS。
为了消毒“不可靠”的字符串,我通常会合并strip_tags
和html_entity_decode
。 这样,即使字符编码方式为Ł
,我也避免了所有代码注入。
$cleaned_string = strip_tags(html_entity_decode($var, ENT_QUOTES, 'UTF-8'));
然后,你必须建立一个递归函数,调用前面的函数并遍历多维数组。最后,当您想要将变量用于SQL语句时,您可以使用DBMS特定(或PDO)转义函数。
$var_used_with_mysql = mysql_real_escape_string($cleaned_string);
参见:
- Best way to stop SQL Injection in PHP
- What are the best practices for avoid xss attacks in a PHP site
,它是在它需要上下文中使用之前清理数据为...安全。 (例如,在您要输出HTML之前不要运行htmlspecialchars,您可能需要未编辑的数据(例如,如果您决定通过电子邮件从数据库发送内容))。
这取决于你想达到什么。您的版本可能会阻止(可能)所有SQL注入并去除HTML(更确切地说:防止在发送到浏览器时将其解释)。你可能(也可能应该)在输出上应用htmlspecialchars()
,而不是输入。也许在将来的某个时候,你想允许简单的事情,如<b>
。
但还有更多的消毒,例如,如果你期望一个电子邮件地址,你可以验证它确实是一个电子邮件地址。
如前所述,不要在输入输出中使用htmlspecialchars。要考虑的另一件事是确保输入如预期。例如,如果你期望一个数字使用is_numeric(),或者如果你期望一个字符串只有一定的大小或至少一定的大小检查这一点。这样,您就可以提醒用户他们在输入中做出的任何错误。
您可以使用PHP函数:filter_var()
中的链接一个很好的教程:
http://www.phpro.org/tutorials/Filtering-Data-with-PHP.html
例如消毒整数:
消毒的整数与FILTER_SANITIZE_INT过滤器简单。此过滤器会去除除数字和字母以外的所有字符。 + - 使用起来很简单,我们不再需要用正则表达式来让我们的头脑发呆。
<?php
/*** an integer ***/
$int = "abc40def+;2";
/*** sanitize the integer ***/
echo filter_var($int, FILTER_SANITIZE_NUMBER_INT);
?>
以上代码生成的40 + 2作为无INT值的输出,作为由过滤器指定的,已被去除
除了消毒还应该验证它的数据。就像在询问年龄后检查数字一样。或者确保电子邮件地址有效。除了安全方面的益处外,您还可以通知用户输入问题。
我认为,如果输入绝对是数字或绝对是电子邮件地址,那么进行SQL注入几乎是不可能的,因此需要增加安全级别。
- 1. 如何对用户输入操作符进行编码
- 2. 如何在Swift中在操场上进行用户输入?
- 3. 如何在php中进行链操作
- 4. 用户输入来执行操作
- 5. 如何从EditTextPreference获取用户输入(并使用它进行操作)?
- 6. 如何对C#中的用户输入进行分类
- 7. 如何对进度条进行操作
- 8. 如果输入有html,则对用户输入进行清理
- 9. Python - 在写入输出之前对值进行操作
- 10. 如何在java中读取用户对数组操作的多个输入
- 11. PHP到C#的转换。接受用户输入/操作用户输入
- 12. 通过PHP对用户输入进行净化处理
- 13. 如何在JTextField上输入时对JButton执行操作?
- 14. 如何将来自用户php的输入与MySQL的输入进行比较
- 15. 如何在阵列中使用操作符进行操作
- 16. 如何防止用户无需在android应用中的edittext中输入值进行操作?
- 17. 如何从用户获取输入并对该输入进行冒泡排序?
- 18. 如何在Atom编辑器中进行用户输入?
- 19. 如何在matplotlib中进行用户输入?
- 20. 对麦克风输入执行操作
- 21. 查找输入标签并对其属性进行操作
- 22. 如何在用户点击输入时触发操作?
- 23. 如何在Linux客户机操作系统中输入符号(@)
- 24. 如何在JAVA中对用户输入的数字列表进行计算?
- 25. 在php中使用sqlsrv_query进行SELECT操作使用php
- 26. 何时何地对用户输入进行编码?
- 27. 如何在drupal中执行php操作
- 28. vba Excel在用户输入时执行操作
- 29. 如何基于用户操作对用户操作进行表单控制而不需要回发
- 30. 如何通过用户在python中输入的IP地址进行循环操作
对用户输入进行什么操作?你想怎么做用户输入? – Gumbo 2010-01-06 09:22:04
可能的重复:http://stackoverflow.com/questions/129677 – Gumbo 2010-01-06 09:22:59
在提问前请使用搜索功能:http://stackoverflow.com/search?q=php+sanitize+user+input – soulmerge 2010-01-06 09:32:40