XSS PHP输入/输出
您好,关于XSS和PHP的问题XSS PHP输入/输出,php,xss,Php,Xss,您好,关于XSS和PHP的问题 if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){ $clean['firstname'] = $_POST['firstname']; }; 我正在构建一个PHP应用程序,所有输入都将通过客户端进入数据库,然后通过服务器端验证,使用filtervar进行清理……数据库中存储的加密密码,如果我键入scripttag——不管怎样——脚
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
我正在构建一个PHP应用程序,所有输入都将通过客户端进入数据库,然后通过服务器端验证,使用filtervar进行清理……数据库中存储的加密密码,如果我键入scripttag——不管怎样——脚本标记,它就这样存储在数据库中,不会造成任何伤害
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
XSS仅仅是直接输出输入时的一种威胁,并且使用htmlentities的唯一时间是从用户输出输入数据时
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
我的应用程序不会这样做,但有没有办法让潜在攻击者注入一些恶意代码并导致其输出,即使我的编程逻辑不允许这样做
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
我想把所有的基地都覆盖起来
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
期待您的回答。。。。。。。。。
是的,我使用PDO准备的语句bindParam,execute来防止SQL注入,并将数据安全地存储在数据库中,我还使用:
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
对于卫生处理,可在……….上进行改进
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
我刚刚修复了代码,if语句阻止filter var清理脚本标记,请参见下面的内容:
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
$clean = array();
$clean['firstname'] = (filter_var($_POST['firstname'], FILTER_SANITIZE_STRING));
$clean['lastname'] = (filter_var($_POST['lastname'], FILTER_SANITIZE_STRING));
$clean['username'] = (filter_var($_POST['username'], FILTER_SANITIZE_STRING));
现在,脚本标记不再在数据库中 输入
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
如果您使用filtervar对内容进行了适当的清理或验证,那么数据库端可能没有任何问题。有时候,很难知道你是否已经覆盖了所有的基础。您的数据库查询可能仍然应该使用参数化查询来保护您
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
输出
如果其他用户可以看到任何用户输入,则应正确转义目标内容类型的数据;甚至用户名之类的东西也可能是恶意的。如果您展示一些如何使用filter_var()的代码示例,那就太好了。然而,总的来说,这里有一些事情需要考虑:
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};
- filter_var()可能是一个很好的工具。此外,您还可以查看库HTMLPurifier。我在这方面取得了很多成功。目标是在坏内容进入数据库之前将其删除
- 使用准备好的语句将数据插入数据库。虽然这在仅用于单个查询时会有一点额外的权重,但它是直接将数据插入数据库的最佳方法,而sql注入的风险最小
- 在输出数据时使用htmlentities()和正确的编码。例如,不允许在数据库中使用UTF-8数据,而是输出ISO 8859-1输出。我总是建议确保您的文档编码、数据库和所有过滤方法都使用相同的编码,最好是UTF-8
- 不要忘记$\u服务器在PHP中是不干净的。许多人做了大量的过滤和HTML实体,但在表单中使用未初始化版本的$\u SERVER['REQUEST\u URI']
如果您需要具体帮助,请发布代码示例。您认为我如何使用filtervar?我使用的是ctype_alnum,但当我输入say o'reilly作为姓氏时,它在数据库中显示为null…………php中是否有更好的净化形式,但我想这取决于输入类型,以及您将使用什么…………我将看一看html净化器……谢谢,一般来说,就像我说的,我使用HTMLPurifier。我倾向于不使用filter_var()的内置清理常量。相反,我使用了回调版本,并将其传递给我自己的方法。在那里,我创建了正则表达式来删除“坏”的东西。但是,我发现我仍然错过了很多。这就是为什么最好在DB之前进行消毒,在DB之后进行过滤。:)祝你好运谢谢,我会使用HTML净化器……但现在我更喜欢自己实现,因为我还在学习原理。刚刚签出的过滤器回调看起来是一个很好的方法,可以为您提供对所需数据的特定控制。谢谢
if(filter_var($_POST['firstname'], FILTER_SANITIZE_STRING)){
$clean['firstname'] = $_POST['firstname'];
};