我正在阅读一篇关于表单安全性的文章,因为我有一个表单,用户可以在其中添加消息.
我读到最好用strip_tags(),htmlspecialchars()和nl2br().据说其他地方使用它html_entity_decode().
我在我的页面中有这个代码,它接受用户输入
<?php
$topicmessage = check_input($_POST['message']); //protect against SQLinjection
$topicmessage = strip_tags($topicmessage, "<p><a><span>");
$topicmessage = htmlspecialchars($topicmessage);
$topicmessage = nl2br($topicmessage);
?>
Run Code Online (Sandbox Code Playgroud)
但当我strip_tags回复消息时,它全部在一条线上,并且看起来断裂已被移除而不是被放回去nl2br().
对我而言,这是有道理的,为什么它会这样做,因为如果中断被删除,它如何知道将它放回去(或者它)?
无论如何,我正在寻找一种方法,我可以保护我的形式,用于尝试和黑客网站,如在表单中使用JavaScript.
好的,这个主题是我理解的温床.我也明白这种情况取决于您使用的代码.我有三种情况需要解决.
我有一个表格,我们需要允许人们发表使用逗号,波浪号等的评论和陈述......但仍然可以安全地免受攻击.
我有人进入这样的日期:10/13/11 mm/dd/yy英文,这可以消毒吗?
如何理解如何使用htmlspecialchars(),htmlentities()以及real_escape_string()是否正确?我已经阅读了php.net网站和这里的一些帖子,但在我看来这是一个情况,这一切都取决于阅读问题的人是什么正确的答案.
我真的不能接受......必须有一个答案,其中与我在这里发布的文本格式类似的文本格式可以被清理.我想知道是否以及如何做到这一点.
谢谢...因为在我看来,在其他地方提出这个问题时,它往往会烦恼...我正在学习我需要知道的东西,但我想我已经达到了一个平台,我所知道的就是没有一个例子它意味着......
提前致谢.
我传递了我的模板一个字符串数组,我想将其转换为jaavascript数组:
控制器文件(php):
$myVar = array('a','b','c');
Run Code Online (Sandbox Code Playgroud)
期望的HTML:
var myVar = ["a","b","c"];
Run Code Online (Sandbox Code Playgroud)
我尝试以下代码(twig):
var myVar = ["{{ myVar | join('","') }}"];
Run Code Online (Sandbox Code Playgroud)
但是twig生成器将引号转换为html实体,结果如下:
var myVar = ["a","b","c"];
Run Code Online (Sandbox Code Playgroud)
有些想法?
我遇到了一个特定的字符串(它不是完全可打印的,但你可以在下面看到)导致htmlspecialchars()返回一个零长度的字符串.有什么方法可以修复吗?
$Stmnt = 'SELECT subject_name FROM bans WHERE id = 2321';
$Fetch = $Conn->query($Stmnt);
if(!$Fetch)
die('Could not query DB');
while($Row = $Fetch->fetch_array(MYSQLI_ASSOC))
{
$RawName = $Row['subject_name'];
$RawLen = strlen($RawName);
echo('RAW NAME: ['.$RawName.']'.', LENGTH: ['.$RawLen.']'.'<br />');
for($i = 0; $i < $RawLen; $i++)
echo('CHAR '.$i.' = ['.$RawName[$i].'] (ORD: '.ord($RawName[$i]).')<br />');
$CleanName = htmlspecialchars($RawName, ENT_QUOTES, 'UTF-8');
$CleanLen = strlen($CleanName);
echo('CLEAN NAME: ['.$CleanName.']'.', LENGTH: ['.$CleanLen.']'.'<br />');
for($i = 0; $i < $CleanLen; $i++)
echo('CHAR '.$i.' = ['.$CleanName[$i].'] (ORD: '.ord($CleanName[$i]).')<br />');
}
$Fetch->close();
echo('DONE'); …Run Code Online (Sandbox Code Playgroud) 当我将变量发布到数据库时,我当然使用了mysql_real_escape_string.这样,特殊字符就像它应该的那样进入数据库.
当我从数据库中读取这个变量时,我再次使用mysql_real_escape_string stripslashes:
$var = stripslashes(mysql_real_escape_string($record['rowname']));
Run Code Online (Sandbox Code Playgroud)
否则它会在引号前给我斜线.
当我使用$var上面提到的这个并想要回应它时,我很简单,echo "$var"因为它已经被剥离并逃脱了,对吧?
另外,如果我在变量上使用stripslashes+ mysql_real_escape_string,那么在数据库中再次POST这个相同的变量就mysql_real_escape_string足够了吗?或者我是否还需要stripslashes这个变量?
总结如下:
据我所知,这是如何工作的:
mysql_real_escape 每一次:当通过变量读取查询时,就像将变量发布到数据库一样.stripslashes在回显转义变量时使用.stripslashes变量再次发布和转发到数据库,则无需再次将其删除.我想念htmlspecialchars吗?
编辑
所以这都错了?
while( $record=mysql_fetch_array($result) )
{
$custid=mysql_real_escape_string($record['custid']);
$custsurname=mysql_real_escape_string($record['custsurname']);
$custmidname=mysql_real_escape_string($record['custmidname']);
$custforename=mysql_real_escape_string($record['custforename']);
$custcountry=stripslashes(mysql_real_escape_string($record['custcountry'])); }
Run Code Online (Sandbox Code Playgroud) php mysql mysql-real-escape-string htmlspecialchars stripslashes
我从不同的博客中发现,强烈建议用它htmlspecialchars()来输出屏幕上的任何数据以免安全XSS Attack.
我filter_input()用来过滤插入之前来自用户的任何数据database.filter_input()转换特殊字符,如'到'并保存它的方式,像
I'm going to shopping with Molly's sister;Dolly
Run Code Online (Sandbox Code Playgroud)
我的问题是
How can I print(output) apostrope or quotes and specific special characters to users screen using htmlspecialchars so that the output would be user friendly
我试图使用htmlspecialchars($post,ENT_NOQUOTES);,但它给了我存储在数据库中的相同数据副本.如果我不使用htmlspecialchars(),只$post给我预期的结果,我认为很容易XSS Attack
感谢您的时间,并期待从同行那里获得帮助.
编辑
我有建议使用htmlspecialchars_decode()或html_entity_decode()回答,但(/sf/users/93680471/͢ck)和其他一些建议不要使用这些functions来输出屏幕上的数据.
请注意我正在使用prepared statement和parameterized query.但我不想保留任何安全漏洞,这就是为什么在发送到数据库之前过滤数据.
因为我曾经filter_input()在发送到数据库之前过滤数据,所以直接$post=$posted_data; …
htmlspecialchars()似乎正在将特殊字符转换为以下字符: āķūņūķī到它们各自的实体编号中:
ā ķ ū ņ ū ķ ī
有些仍未翻译,例如:
ZS
我希望htmlspecialchars()(或其他一些功能)不翻译这些字母类型的字符......所以它只翻译以下内容(因为它似乎在php.net手册上指出):
我需要这个的原因是因为在POST请求之后,我正在运行此用户输入,htmlspecialchars()然后将其放回到一组新的html输入中.诸如&,",",<,>之类的字符需要翻译,以免导致显示错误等.但我需要像' āķūņūķī ' 这样的特殊字符保持不变.否则用户会非常困惑.
php input character-encoding special-characters htmlspecialchars
我目前正在尝试一些通用的方法来验证和清理我的表单输入.当然,有数百种方法可以做到这一点我的特殊挑战我的任务涉及到我的帖子数据并array_map()在我把它带进来时正常运行.我有我自己的自定义功能设置运行filter_var()并preg_match()根据需要运行在我修改数据后,我在array_map()之后的数据,然后mysqli_real_escape_string()在运行SQL之前运行它来处理它.你会注意到我htmlspecialchars()一遍又一遍地跑.是否可以在我的帖子数据上同时运行trim和htmlspecialchars.我是为了效率,所以欢迎任何其他建议.
// Trim all the incoming data
$trimmed = array_map('trim', $_POST);
// Assume invalid values
$un = $fn = $ln = $e = $pn = $bio = FALSE;
// Check username
$un = validateUsername(htmlspecialchars($trimmed['uname']));
// Check first name
$fn = validateName(htmlspecialchars($trimmed['fname']));
// Check last name
$ln = validateName(htmlspecialchars($trimmed['lname']));
// Check email address
$e = validateEmail(htmlspecialchars($trimmed['email']));
Run Code Online (Sandbox Code Playgroud)
...等等
I have been reading up on htmlspecialchars() for escaping user input and user input from the database. Before anyone says anything, yes, I am filtering on db input as well as using prepared statements with bindings. I am only concerned about securing the output.
I am confused as to when to use ENT_COMPAT, ENT_QUOTES, ENT_NOQUOTES. I came across the following excerpt while doing my research:
The second argument in the
htmlspecialchars()call isENT_COMPAT. I've used …
我正在对空格 (" ") 进行简单的字符串替换, 以获得一些基本格式(连续多个空格)。然而,经过这么多年,我终于发现它 实际上代表了不间断空间,如果我对整个字符串进行全面替换,我不会得到任何换行。
空格是否有特殊的 html 字符会损坏?另一个替换是简单地对我的替换搜索仅搜索双空格。
htmlspecialchars ×10
php ×8
security ×2
array-map ×1
html ×1
input ×1
mysql ×1
mysqli ×1
strip-tags ×1
stripslashes ×1
twig ×1
xss ×1