修剪表单输入和转义字符是否是一种好习惯?

问题描述

| 像这样,
$type = MysqLi_real_escape_string($dbc,trim($_POST[\'type\']));
修饰会提高安全性还是MysqLi_real_escape_string已经足够了?     

解决方法

mysqli_real_escape_string是不够的。 对表单输入执行此操作是非常糟糕的主意 无论如何都不应该使用它 说到转义,mysql [i] _real_escape_string不是make-my-data-magically-safe()函数,而是仅转义字符串定界符,以防止字符串被破坏。因此,它对数字没有帮助。 实际上,它与注入攻击无关,因为无论任何攻击,都应使用此函数,而仅仅是使您的字符串符合SQL语法规则。 而且它对查询的任何其他部分都没有帮助。 而且,它与“表单输入”或一般的表单无关。它是与数据库相关的功能,而不是与表单相关的功能。它是要转义到查询的字符串,别无其他。 无论如何都不应该使用它,因为您必须使用mysqli准备好的语句。 而且,是的-trim()与安全性无关,而是使数据看起来更整洁。     ,mysqli_real_escape_string将仅转义该字符串以防止注入攻击。如果您不希望有空白,那么也应该修剪一下。     ,使用mysqli_real_escape_string足以防止注入数据库。 向用户显示发布的值时,您应确保在上面使用htmlentities。     ,修剪字符串的空格不会提高安全性。 转义字符串应该足以防止sql注入。     ,您的示例将有助于防止SQL注入,因为任何\“特殊字符\”将被转义(因此\“变为\\\”,依此类推),但不会阻止XSS(跨站点脚本)仍包含<和>之类的HTML字符 您可以使用以下代码来帮助防止两种类型的攻击
<?php
    //Get the variable
    $userValue = $_GET[\'value\'];
    //Remove any preceding/leading whitespace
    $userValue = trim($userValue);
    //Convert any HTML characters to their entity value
    $userValue = htmlspecialchars($userValue);
    //Escape any SQL special characters
    $userValue = mysqli_real_escape_string($dbc,$userValue);
?>
有关XSS的更多信息,请查看此链接https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) 另一个有用的资源是此PHP库,它旨在过滤任何用户输入,以防止(几乎)XSS的所有方法http://htmlpurifier.org/     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...